我想在不用显式调用新方法的情况下,给一个子类添加一些额外的属性。那么有没有一种方法可以给继承的类一个__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
的顺序不能保证。 - khachik__new__
的作用以及为什么需要修改它,否则请不要覆盖它。你可能并不知道它的真正含义。它不是__init__
的别名。它比我们通常关注的魔法级别高三倍,尤其是对于初学者来说。 - user395760__new__
函数的参数是self
的 class 而不是self
自身,因为它是一个隐式的类方法。所以在你的例子中,实际上你正在设置类属性inheritedclass.attr3
,而不是你认为的self.attr3
。 - Lauritz V. Thaulow