我想写一个包装类,除了添加'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) 好吧,所以我在这里有一个奇怪的例子,我无法弄明白.
我想在网站上解析一个列表.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循环的上下文.所以这里有两个问题:
$item->attributes with另一个foreach方法,然后比较属性名称data-text并在匹配的情况下读取值,但肯定有更好的方法来做到这一点?!我一直在使用 .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)
我们也得到“这是一个测试”。
那么,这两种方法有区别吗?使用一个比另一个有什么好处吗?
谢谢!
我正在阅读链接中描述符如何工作的解释:http://users.rcn.com/python/download/Descriptor.htm#properties.
但是,在这里,在类Property的__get__方法下,我对方法签名有疑问.方法签名是:
def __get__(self, obj, objtype=None):
在这里,我知道何时以及如何obj可以是无或实际对象.
但是,我不明白:在何种情况下可以objtype是None?而且,它在实际例子中是如何有用的.
我一整天都在与这个问题作斗争,并进行了大量的谷歌搜索。我遇到了似乎是继承问题。
我有一个名为 BaseClass 的类,它为我做一些简单的事情,例如设置日志记录默认值、保存日志和管理只读属性。过去我对这个课程没有任何问题,但我可以说我现在只使用 python 几个月了。此外,我认为有一些重要的警告:
__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 …
我在从 iframe 内部访问 iframe 属性时遇到问题。

<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 nullRun Code Online (Sandbox Code Playgroud)

如何从第二个 iframe 内部获取链接属性?
upd 这是来自 Revive Adserver 的代码,这个 iframes 通过 JS 加载。如果手动将其加载到 iframe 中,一切正常。
upd一种解决方案是将所需的参数添加到 src get 参数。
我需要验证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)
事实上,我尝试了不同类型的定位器的不同方式,但没有任何帮助我.你有什么建议吗?
我有一个简单而简短的问题,但在任何地方都找不到答案。我创建了一个 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 函数获取一个字符串名称作为参数 - 名称是什么?我从哪里知道名字的?它是在某处预定义的吗?- 那么在哪里定义另一个?
谢谢!
我有以下 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”属性的元素的文本值?
我有一些特定类的输入字段.它们都有一个数据属性,比如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)
在(firefox)控制台中,我得到:
TypeError:
fields[i].getAttribute不是函数
为什么是这样?我该如何解决?
我不希望使用jQuery,除非绝对必要的(我不认为这是).
getattribute ×10
python ×3
getattr ×2
javascript ×2
selenium ×2
attributes ×1
class ×1
css ×1
dataset ×1
descriptor ×1
dom ×1
domdocument ×1
html-parsing ×1
httpsession ×1
iframe ×1
inheritance ×1
input-field ×1
jakarta-ee ×1
java ×1
object ×1
php ×1
python-2.7 ×1
webdriver ×1