标签: getattribute

有没有办法在Python中覆盖任意对象的双下划线(魔术)方法?

我想写一个包装类,除了添加'reason'属性之外,它取一个值并且表现得像它一样.我有这样的想法:

class ExplainedValue(object):
    def __init__(self, value, reason):
        self.value = value
        self.reason = reason

    def __getattribute__(self, name):
        print '__getattribute__ with %s called' % (name,)
        if name in ('__str__', '__repr__', 'reason', 'value'):
            return object.__getattribute__(self, name)
        value = object.__getattribute__(self, 'value')
        return object.__getattribute__(value, name)

    def __str__(self):
        return "ExplainedValue(%s, %s)" % (
            str(self.value),
            self.reason)
    __repr__ = __str__
Run Code Online (Sandbox Code Playgroud)

但是,双下划线函数似乎没有被捕获__getattribute__,例如:

>>> numbers = ExplainedValue([1, 2, 3, 4], "it worked")
>>> numbers[0]

Traceback (most recent call last):
  File "<pyshell#118>", line 1, in <module>
    numbers[0]
TypeError: 'ExplainedValue' …
Run Code Online (Sandbox Code Playgroud)

python object magic-methods getattr getattribute

6
推荐指数
1
解决办法
1010
查看次数

php DOM getAttribute

好吧,所以我在这里有一个奇怪的例子,我无法弄明白.

我想在网站上解析一个列表.HTML看起来有点像这样:

<!-- ... -->
<ul id="foo">
    <li data-text="item 1">Blabla</li>
    <li data-text="item 2">Blabla</li>
    <li data-text="item 3">Blabla</li>
    <li data-text="item 4">Blabla</li>
</ul>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)

现在我想抓住所有列表项.我使用DOMDocument类.到目前为止,这很好:

$dom = new DOMDocument();

if (!$dom->loadHTML($html)) {
    die ('Could not parse...');
}

$list = $dom->getElementById('foo');
$items = $list->childNodes;
foreach ($items as $item) {
     print_r($item);
}
Run Code Online (Sandbox Code Playgroud)

但现在,我正在寻找一种简单的方法来读出data-text属性.我做的是:

foreach ($items as $item) {
     echo $item->getAttribute('data-text');
}
Run Code Online (Sandbox Code Playgroud)

这适用于第一个项目,但随后它崩溃了foreach循环.输出是:

item 1
致命错误:在第44行的example.php中调用未定义的方法DOMText :: getAttribute()

我没有得到的是调用getAttribute方法如何改变foreach循环的上下文.所以这里有两个问题:

  1. 如何调用该方法搞砸了我的foreach循环?其次,最优雅的解决方法是什么?
  2. 我意识到我可以遍历$item->attributes with另一个foreach方法,然后比较属性名称data-text并在匹配的情况下读取值,但肯定有更好的方法来做到这一点?!

php dom html-parsing domdocument getattribute

6
推荐指数
1
解决办法
2万
查看次数

JS中.getAttribute和dataset的区别

我一直在使用 .getAttribute 并且今天发现了 .dataset,所以我想知道有什么区别以及应该何时使用它们。

所以这是一个例子。假设我们有一个段落:

<p class="test" data-something="this is a test">some text</p>
Run Code Online (Sandbox Code Playgroud)

如果我们使用 .getAttribute

let testText = document.querySelector('.test');
let testGetAttribute = testText.getAttribute('data-something');
console.log(testGetAttribute);
Run Code Online (Sandbox Code Playgroud)

我们得到“这是一个测试”的输出。

如果我们使用 .dataset

let testText = document.querySelector('.test');
let testDataset = testText.dataset.something;
console.log(testDataset);
Run Code Online (Sandbox Code Playgroud)

我们也得到“这是一个测试”。

那么,这两种方法有区别吗?使用一个比另一个有什么好处吗?

谢谢!

javascript dataset getattribute

6
推荐指数
1
解决办法
3032
查看次数

python __get__方法

我正在阅读链接中描述符如何工作的解释:http://users.rcn.com/python/download/Descriptor.htm#properties.

但是,在这里,在类Property__get__方法下,我对方法签名有疑问.方法签名是:

def __get__(self, obj, objtype=None):

在这里,我知道何时以及如何obj可以是无或实际对象.

但是,我不明白:在何种情况下可以objtypeNone?而且,它在实际例子中是如何有用的.

python descriptor getattribute

5
推荐指数
2
解决办法
3341
查看次数

Python 继承和 __getattr__ &amp; __getattribute__

我一整天都在与这个问题作斗争,并进行了大量的谷歌搜索。我遇到了似乎是继承问题。

我有一个名为 BaseClass 的类,它为我做一些简单的事情,例如设置日志记录默认值、保存日志和管理只读属性。过去我对这个课程没有任何问题,但我可以说我现在只使用 python 几个月了。此外,我认为有一些重要的警告:

  1. 所有过去的继承都是单一的继承。换句话说,我继承了 BaseClass,但继承 BaseClass 的类不会被另一个类继承。在今天的问题中,我将 BaseClass 继承到 BaseFormData,然后继承到 July2013FormData,然后继承到 Jan2014FormData。显然现在有更多层了。
  2. 我过去没有尝试重写__getattr__任何__getattribute__继承 BaseClass 的类。今天我是。BaseClass 有__getattribute__自己的方法来管理只读属性的获取。BaseFormData 类有一个__getattr__方法,因为我读到这是提供数据访问而无需显式声明所有属性的正确方法。正在加载的表单数据中有十几个或更多数据(取决于版本),因此我明确声明了一些重要或别名的属性,而将其余属性留给__getattr__.

这是__getattribute__来自 BaseClass 的:

def __getattribute__(self, attr):
        try:
            # Default behaviour
            return object.__getattribute__(self, attr)
        except:
            try:
                return self.__READ_ONLY[attr]
            except KeyError:
                lcAttr = php_basic_str.strtolower(attr)
                return self._raw[lcAttr]
Run Code Online (Sandbox Code Playgroud)

使用的行self._raw仅仅因为继承 BaseClass 的类经常使用_raw_rawBaseClass 不需要。理想情况下,对的引用_raw仅出现在继承类的__getattr__或中。__getattribute__但是,我需要__getattribute__在 BaseClass 中使用才能使只读功能正常工作。

以及__getattr__来自 BaseFormData …

inheritance getattr python-2.7 getattribute

5
推荐指数
1
解决办法
4562
查看次数

为什么 frameElement 为空?

我在从 iframe 内部访问 iframe 属性时遇到问题。

HTML 结构

<ins><iframe scrolling="no" frameborder="0" width="728" height="90" style="border: 0px; overflow: hidden;">
    #document
	<!DOCTYPE html>
	<html><head><base target="_top"></head>
	<body border="0" margin="0" style="margin: 0; padding: 0">
	<iframe id="ra_frame" src="//banners.com/index.html" link="URL" style="width:728px!important; height:90px!important" ;="" frameborder="0" scrolling="no"></iframe>
	</body></html>
</iframe></ins>
Run Code Online (Sandbox Code Playgroud)

当我在第二个 iframe 旁边调用 frameElement 时,我得到空值。

window.frameElement.getAttribute("link"); //Cannot read property 'getAttribute' of null
Run Code Online (Sandbox Code Playgroud)

控制台快照

如何从第二个 iframe 内部获取链接属性?

upd 这是来自 Revive Adserver 的代码,这个 iframes 通过 JS 加载。如果手动将其加载到 iframe 中,一切正常。

upd一种解决方案是将所需的参数添加到 src get 参数。

iframe getattribute

5
推荐指数
0
解决办法
1676
查看次数

从样式表中获取颜色属性

我需要验证div的背景颜色的值.这是HTML:

<div id="outercontainer" align="left">
Run Code Online (Sandbox Code Playgroud)

有关背景颜色的信息在文件style.css中定义,如下所示:

#outercontainer {
    background-color: #EAEAEA;
    margin-left: auto;
    margin-right: auto;
    opacity: 1;
    width: 1000px;
    z-index: 2;
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用selenium.getattribute命令获取bgcolor的值,但是selenium返回了以下错误消息:

错误:无法找到元素属性:css =#oute rcontainer @ background-color on session bc60eb07f15e4e63986634fb59bf58a1

作为结果.这部分代码:

try
{
     string atr_str = selenium.GetAttribute("css=#outercontainer@background-color");
     Console.WriteLine(atr_str);
}
catch (SeleniumException)
{
     Console.WriteLine("Color value was not got.");
}
Run Code Online (Sandbox Code Playgroud)

事实上,我尝试了不同类型的定位器的不同方式,但没有任何帮助我.你有什么建议吗?

css selenium getattribute

4
推荐指数
1
解决办法
4555
查看次数

Java HttpSession .getAttribute(字符串名称)

我有一个简单而简短的问题,但在任何地方都找不到答案。我创建了一个 HttpSession 并想从中获取一个属性,例如一个 User 对象。

HttpSession session = request.getSession(true);
Object userObject = session.getAttribute("name");
if ((userObject != null) && (userObject instanceof User)) {
    User currentUser = (User) userObject;
    ...
}
Run Code Online (Sandbox Code Playgroud)

问题如下: .getAttribute 函数获取一个字符串名称作为参数 - 名称是什么?我从哪里知道名字的?它是在某处预定义的吗?- 那么在哪里定义另一个?

谢谢!

java httpsession getattribute jakarta-ee

4
推荐指数
1
解决办法
2万
查看次数

如何根据使用 Selenium 的 html 从使用 xpath 找到的元素中检索属性 aria-label 的值

我有以下 HTML 跨度:

<button class="coreSpriteHeartOpen oF4XW dCJp8">
    <span class="glyphsSpriteHeart__filled__24__red_5 u-__7" aria-label="Unlike"></span>
</button>
Run Code Online (Sandbox Code Playgroud)

我也有一个webElement表示包含这个跨度的按钮,我使用xpath. 如何aria-label从元素中检索值(Unlike)?

我试图做:

btn = drive.find_element(By.xpath, "xpath") 
btn.get_attribute("aria-label")
Run Code Online (Sandbox Code Playgroud)

但它什么都不返回。如何从元素对象中检索具有“aria-label”属性的元素的文本值?

python selenium webdriver getattribute selenium-webdriver

4
推荐指数
2
解决办法
1万
查看次数

具有某些类的元素的getAttribute不起作用

我有一些特定类的输入字段.它们都有一个数据属性,比如data-somedata一个整数值.我必须计算这些数据属性的总和.我尝试getAttribute结合使用getElementsByClassName,但这不起作用.

我正在使用此代码:

<input class="datainput" value="The 1st input" type="text" data-somedata="8"/>
<input class="datainput" value="The 2nd input" type="text" data-somedata="15"/>
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)
var fields = document.getElementsByClassName('datainput');
var result = 0;
for (var i in fields) {
    result += fields[i].getAttribute('data-somedata');
}
document.getElementById('result').innerHTML = 'The sum is: ' + result;
Run Code Online (Sandbox Code Playgroud)

在jsFiddle上看到它

在(firefox)控制台中,我得到:

TypeError:fields[i].getAttribute不是函数

为什么是这样?我该如何解决?

希望使用jQuery,除非绝对必要的(我不认为这是).

javascript attributes class input-field getattribute

3
推荐指数
1
解决办法
5900
查看次数