我有一个使用字段的基类:
class Base(object):
def __init__(self, member):
self.member = member
以及一个派生类,该类希望将其提升为属性,并添加一些行为:
^{pr2}$但是,这不能正确地委托给基类:
>>> d = Derived(0)
intercepting setter
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
d = Derived(0)
File "<pyshell#3>", line 3, in __init__
self.member = 2
File "<pyshell#6>", line 9, in member
super(Derived, self).member = value
AttributeError: 'super' object has no attribute 'member'
我该怎么做?在
我认为将成员提升为属性是正确的方法。这就像在基类中有一个
int
成员,并将其更改为派生类中的方法。或者像拥有一个普通方法并在继承器中将其更改为静态或类方法。我想这只是打破了这个概念。在你有几个选择来解决这个问题。在
引入一个不同(相似)名称的属性,然后将所有访问权转发给继承的原始名称如何?这将非常简单,不会破坏从基类继承的任何内容。但它也不允许拦截对原始成员的访问(在基类中或任何时候)。在
二。完全替换继承的成员。这意味着将值存储在另一个成员中,并完全从头开始创建属性。然后让它访问原始文件的存储:
这是输出:
^{pr2}$所以所有的拦截器都被适当地考虑进去了。在
您试图访问super的
member
,就好像它是一个类属性一样。尝试使用:相关问题 更多 >
编程相关推荐