Python使用自定义__new__对类进行子类化

时间:2015-01-30 13:00:54

标签: python inheritance python-3.x subclassing

有一个类(不是由我创建的,来自第三方库)没有声明__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__()方法覆盖到?

1 个答案:

答案 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__