标签: getattribute

__getattr__与__getattribute__之间的区别

我想知道何时使用__getattr____getattribute__.该文件提到了__getattribute__适用于新样式类.什么是新式课程?

python getattr getattribute

378
推荐指数
8
解决办法
12万
查看次数

理解__getattr__和__getattribute__之间的区别

我试图理解上的差异之间__getattr____getattribute__,但是,我在它失败.

Stack Overflow问题的答案vs 之间的差异__getattr____getattribute__说:

__getattribute__在查看对象的实际属性之前调用,因此正确实现可能很棘手.您最终可以轻松地进行无限递归.

我完全不知道这意味着什么.

然后继续说:

你几乎肯定想要__getattr__.

为什么?

我读到如果__getattribute__失败,__getattr__就会被调用.那么为什么有两种不同的方法做同样的事情呢?如果我的代码实现了新的样式类,我应该使用什么?

我正在寻找一些代码示例来清除这个问题.我已经用Google搜索了我的能力,但我找到的答案并没有彻底讨论这个问题.

如果有任何文档,我准备阅读.

python oop encapsulation getattr getattribute

192
推荐指数
4
解决办法
7万
查看次数

如何从Selenium获取元素的属性?

我在Python中使用Selenium.我想得到.val()一个<select>元素,并检查它是我期望的.

这是我的代码:

def test_chart_renders_from_url(self):
    url = 'http://localhost:8000/analyse/'
    self.browser.get(url)
    org = driver.find_element_by_id('org')
    # Find the value of org?
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?Selenium文档似乎有很多关于选择元素但没有关于属性的内容.

python selenium webdriver getattribute selenium-webdriver

61
推荐指数
3
解决办法
10万
查看次数

属性与描述符的使用案例与__getattribute__

问题是哪一个最好用于哪个用例,而不是技术背景.

在python中,您可以通过属性,描述符魔术方法来控制属性的访问.哪个用例最具pythonic?所有这些似乎都具有相同的效果(参见下面的例子).

我正在寻找一个答案:

  • 财产:应该用于......
  • 描述符:在...的情况下,应该使用它而不是属性.
  • 魔术方法:仅在......时使用.

用例将是可能无法在__init__方法中设置的属性,例如因为该对象尚未存在于数据库中,而是在稍后的时间.每次访问该属性时,都应尝试设置并返回该属性.

作为在Python shell中使用Copy&Paste的示例,有一个类只想在第二次询问它时才显示其属性.那么,哪一个是最好的方式,还是有不同的情况,其中一个更好?以下是实现它的三种方法:

随着物业 ::

class ContactBook(object):
    intents = 0

    def __init__(self):
        self.__first_person = None

    def get_first_person(self):
        ContactBook.intents += 1
        if self.__first_person is None:
            if ContactBook.intents > 1:
                value = 'Mr. First'
                self.__first_person = value
            else:
                return None
        return self.__first_person

    def set_first_person(self, value):
        self.__first_person = value

    first_person = property(get_first_person, set_first_person)
Run Code Online (Sandbox Code Playgroud)

__getattribute__::

class ContactBook(object):
    intents = 0

    def …
Run Code Online (Sandbox Code Playgroud)

python properties descriptor getattribute

14
推荐指数
1
解决办法
2097
查看次数

python:__getattr__的合作超级调用

我正在使用与此代码类似的somethign:

class BaseClass(object):
    def __getattr__(self, attr):
        return lambda:'1'

class SubClass(BaseClass):
    def foo(self):
        suffix = '2'
        return super(SubClass, self).foo() + suffix

class SubClass2(SubClass):
    def foo(self):
        suffix = '3'
        return super(SubClass2, self).foo() + suffix

o = SubClass2()
print o.foo()
Run Code Online (Sandbox Code Playgroud)

我希望看到'123'的输出,但我得到一个错误AttributeError: 'super' object has no attribute 'foo'.Python甚至没有尝试使用基类__getattr__.

如果不修改基类,并保持两个超级调用相似,我就无法获得我想要的输出.有没有合适的超级电话模式在这里适合我?

我知道super()会以某种方式覆盖getattr以执行它需要做的事情,但是我想问是否有任何合理的解决方法允许__getattr__在适当的时候调用子类.

python super getattr getattribute

12
推荐指数
2
解决办法
1617
查看次数

使用__getattribute__或__getattr__在Python中调用方法

我正在尝试创建一个子类,作为自定义类的列表.但是,我希望列表继承父类的方法和属性,并返回每个项的数量总和.我试图使用该__getattribute__方法执行此操作,但我无法弄清楚如何将参数传递给可调用属性.下面的高度简化的代码应该更清楚地解释.

class Product:
    def __init__(self,price,quantity):
        self.price=price
        self.quantity=quantity
    def get_total_price(self,tax_rate):
        return self.price*self.quantity*(1+tax_rate)

class Package(Product,list):
    def __init__(self,*args):
        list.__init__(self,args)
    def __getattribute__(self,*args):
        name = args[0]
    # the only argument passed is the name...
        if name in dir(self[0]):
            tot = 0
            for product in self:
                tot += getattr(product,name)#(need some way to pass the argument)
            return sum
        else:
            list.__getattribute__(self,*args)

p1 = Product(2,4)
p2 = Product(1,6)

print p1.get_total_price(0.1) # returns 8.8
print p2.get_total_price(0.1) # returns 6.6

pkg = Package(p1,p2)
print pkg.get_total_price(0.1) #desired output is 15.4. …
Run Code Online (Sandbox Code Playgroud)

python getattr getattribute

10
推荐指数
2
解决办法
9164
查看次数

要使用getAttribute(),还是不要使用getAttribute():这就是问题所在

可能重复:
JavaScript setAttribute vs .attribute =
javascript dom,如何处理"特殊属性"作为属性?

很多时候,在Usenet的论坛或地方,我被一些人(当批评我的代码时)告诉我,而不是说,例如var link = a.href我应该使用var link = a.getAttribute('href');.并且在想要分配时使用其互补的setAttribute().

他们说这是正确的做法,我错了,等等等等......我通常不会注意那些.当我问为什么没有人给出真正的答案时.

现在我很好奇在哪些情况下更适合使用其中一种或另一种.

在什么情况下更适合说var link = a.getAttribute('href');而不是var link = a.href
在什么情况下,我使用setAttribute()来分配,而不是直接通过其标识符为成员赋值?即:`a.href ='someURL';

javascript attributes members setattribute getattribute

9
推荐指数
1
解决办法
4627
查看次数

custom属性仅适用于element.getAttribute("attribute")但不适用于"element.attribute"

我刚才注意到,如果我给html元素一个自定义属性,例如:

<input type="button" id="my_button" custom_attr="custom_attr_text" value="value_text" />
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样检索它:

document.getElementById("my_button").getAttribute("custom_attr");
Run Code Online (Sandbox Code Playgroud)

它会回来"custom_attr_text",但如果我这样做

document.getElementById("my_button").custom_attr;
Run Code Online (Sandbox Code Playgroud)

然后它回来了undefined!

我还注意到,使用内置属性(例如valueid)以上两种工作都很好!有人可以解释为什么会这样吗?

javascript custom-attribute getattribute

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

查找元素是否可见(JavaScript)

我有一个javascript函数,试图确定div是否可见,并使用该变量进行各种处理.我成功地通过改变它在none和block之间的显示来交换元素可见性; 但我无法存储这个价值......

我已经尝试获取元素显示属性值并查找元素ID是否可见但是两者都没有效果.当我尝试.getAttribute时,它总是返回null; 我不知道为什么,因为我知道id被定义并且它有一个display属性.

这是我尝试过的两种不同方法的代码:

var myvar = $("#mydivID").is(":visible");
var myvar = document.getElementById("mydivID").getAttribute("display");
Run Code Online (Sandbox Code Playgroud)

任何指导或协助将不胜感激.

javascript jquery dom visible getattribute

9
推荐指数
4
解决办法
5万
查看次数

getAttribute("value") 不适用于驱动程序 91.0.4472.19 和 Chrome 91.0.4472.77

在 Chrome 和驱动程序更新到第 91 版后,我发现驱动程序为 91.0.4472.19 (win32) 的 VBA 宏变成了从输入标签“值”属性返回空字符串 (""):

Dim ch As SeleniumWrapper.WebDriver
Dim el As WebElement
' some code here ...
ch.findElementById("htmlLoginId").SendKeys login
Set el = ch.findElementById("htmlLoginId")
txt = el.getAttribute("value")
Run Code Online (Sandbox Code Playgroud)

使用较旧的驱动程序版本 90.0.4430.24,这可以正常工作。希望它会在下一个驱动程序版本中得到修复。

还有另一种方法可以从input[type=text]标签中获取价值吗?如果这个错误不会在第 92 个版本中修复并且第 90 个驱动程序版本变得不兼容,我想避免这种情况。

vba getattribute selenium-chromedriver

7
推荐指数
1
解决办法
2054
查看次数