[英]method __getattr__ is not inherited from parent class
from mechanize import Browser
class LLManager(Browser, object):
IS_AUTHORIZED = False
def __init__(self, login = "", passw = "", *args, **kwargs):
super(LLManager, self).__init__(*args, **kwargs)
self.set_handle_robots(False)
但是当我做这样的事情时:
lm["Widget[LinksList]_link_1_title"] = anc
然后我得到一个错误:
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
lm["Widget[LinksList]_link_1_title"] = anc
TypeError: 'LLManager' object does not support item assignment
浏览器类具有覆盖方法__getattr__
,如下所示:
def __getattr__(self, name):
# pass through _form.HTMLForm methods and attributes
form = self.__dict__.get("form")
if form is None:
raise AttributeError(
"%s instance has no attribute %s (perhaps you forgot to "
".select_form()?)" % (self.__class__, name))
return getattr(form, name)
为什么我的类或实例不像父类那样获得此方法?
您需要重写__setattr__
以支持这种方式的分配 。 __getattr__
仅用于检索
项目和属性之间有区别。 使用ob[item]
访问ob[item]
,而使用ob.item
访问属性。 定义项目分配的方法是__getitem__
和__setitem__
,如果要设置项目,不仅要访问它们,还需要第二个方法。 方法__getattr__
, __getattr__
__setattr__
和__getattribute__
处理属性,在这里没有帮助,此外,应避免最后两个方法,因为它们会使类的创建变得过于复杂。
不要从对象机械化继承。浏览器不使用新的样式类。 这应该按预期工作。
from mechanize import Browser
class LLManager(Browser):
IS_AUTHORIZED = False
def __init__(self, login = "", passw = "", *args, **kwargs):
mechanize.Browser.__init__(self, *args, **kwargs)
self.set_handle_robots(False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.