有一个类(不是由我创建的,来自第三方库)没有声明__init__
(object
的{{1}}除外),这是它的{{ 1}}:
__init__
我不明白他们为什么不在这里使用__new__
,但他们没有。
现在我想将其子类化并给它一个额外的属性;在我检查类的源代码(仅文档)之前,我认为它只是像其他人一样使用def __new__(cls, uid):
self = super().__new__(cls, uid)
self._info = get_info_from_uid(uid)
return self
,所以这就是我所做的:
__init__
显然,这引发了来自__init__
的TypeError并未采用参数。
我应该如何使用class MyClass(TheirClass):
def __init__(self, uid, my_stuff=()):
super().__init__(uid)
self.my_stuff = my_stuff
将这个类子类化?
我只是将object.__init__()
方法覆盖到?
答案 0 :(得分:6)
由于原始项目停留在__new__
并且在子类can get very tricky indeed中同时使用__init__
和__new__
,因此您必须使用{{1在子类中也是如此:
__new__
也许原作者认为该类型应该被视为不可变的。
如果你坚持,你仍然可以使用class MyClass(TheirClass):
def __new__(cls, uid, my_stuff=()):
self = super().__new__(cls, uid)
self.my_stuff = my_stuff
return self
,但是你必须指定一个__init__
方法无论如何来解释你{{1}的额外参数现在需要:
__new__