【发布时间】:2011-08-03 22:22:25
【问题描述】:
我想给子类一些额外的属性,而不必显式调用新方法。那么有没有办法给继承的类一个__init__类型的方法而不覆盖父类的__init__方法呢?
我编写下面的代码纯粹是为了说明我的问题(因此属性命名不佳等)。
class initialclass():
def __init__(self):
self.attr1 = 'one'
self.attr2 = 'two'
class inheritedclass(initialclass):
def __new__(self):
self.attr3 = 'three'
def somemethod(self):
print 'the method'
a = inheritedclass()
for each in a.__dict__:
print each
#I would like the output to be:
attr1
attr2
attr3
谢谢
【问题讨论】:
-
在派生类构造函数中调用
initialclass.__init__。但是,attrX的顺序不保证。 -
不要覆盖
__new__,除非你确切地知道它做了什么以及为什么你需要摆弄它。你大概不知道。这不是__init__的别名。它比我们通常关心的级别高出三个级别,尤其是初学者。 -
注意
__new__的参数是self的class,而不是self,因为它是一个隐式类方法。所以在你的例子中,你实际上是在设置类属性inheritedclass.attr3,而不是你想象的self.attr3。
标签: python oop inheritance