方法__getattr__不是从父类继承的

尝试子类化mechanize.Browser类:
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)
为什么我的类或实例没有在父类中获得此方法?     
已邀请:
不要从object,mechanize.Browser继承,不使用新的样式类。这应该按预期工作。
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)
    
您需要覆盖
__setattr__
以此方式支持分配。
__getattr__
仅用于检索     
项目和属性之间存在差异。使用
ob[item]
访问项目,使用
ob.item
访问属性。定义项目分配的方法是
__getitem__
__setitem__
,如果要设置项目,则第二个是必需的,而不仅仅是访问它们。方法
__getattr__
__setattr__
__getattribute__
处理属性,在这里没有帮助,此外,应避免使用后两个,因为它们太过复杂化了类的创建。     

要回复问题请先登录注册