正在尝试子类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)
但当我做这样的事情时:
^{pr2}$然后我得到一个错误:
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
Browser类已重写方法__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)
为什么我的类或实例没有像在父类中那样得到这个方法?在
物品和属性是有区别的。使用}处理属性,在这里没有帮助,此外,应该避免最后两个方法,因为它们会使类的创建复杂化。在
ob[item]
访问项,而使用ob.item
访问属性。定义项赋值的方法是__getitem__
和__setitem__
,如果要设置项,则需要第二个方法,而不仅仅是访问它们。方法__getattr__
、__setattr__
和{不从对象继承,机械化.Browser不使用新样式类。这应该如预期的那样有效。在
您需要重写
__setattr__
以这种方式支持赋值。__getattr__
仅用于检索相关问题 更多 >
编程相关推荐