尝试继承mechanize。浏览器类:
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)
为什么我的类或实例没有在父类中获得此方法?
答案 0 :(得分:1)
您需要以这种方式覆盖__setattr__
以支持分配。 __getattr__
仅用于检索
答案 1 :(得分:1)
项目和属性之间存在差异。使用ob[item]
访问项目,而使用ob.item
访问属性。定义项目分配的方法是__getitem__
和__setitem__
,如果您要设置项目,则第二个是必需的,而不仅仅是访问它们。方法__getattr__
,__setattr__
和__getattribute__
处理属性,并没有帮助你,此外,应该避免最后两个因为它们太多地复杂化你的类的创建
答案 2 :(得分:1)
不要从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)