![](/img/trans.png)
[英]Why can't pass *args and **kwargs in __init__ of a child class
[英]Why can't *args be passed to super().__init__() from class that overrides int?
class MyInt(int):
def __new__(cls, *args, **kwargs):
print(repr(args), repr(kwargs))
return super(MyInt, cls).__new__(cls, *args, **kwargs)
def __init__(self, *args, **kwargs):
print(repr(args), repr(kwargs))
return super(MyInt, self).__init__(*args, **kwargs)
MyInt(1)
此代码输出:
(1,) {}
(1,) {}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-a45744cab1af> in <module>()
----> 1 MyInt(1)
<ipython-input-3-a38fc9aae2fe> in __init__(self, *args, **kwargs)
5 def __init__(self, *args, **kwargs):
6 print(repr(args), repr(kwargs))
----> 7 return super(MyInt, self).__init__(*args, **kwargs)
8
TypeError: object.__init__() takes no parameters
似乎基础__init__()
期待 args,因为我可以打印它们。 那么为什么我不能将它们传递给基础 class 的方法呢? (顺便说一句,这在 python 2.7 中运行良好)
由于int
object 是不可变的,所以不能使用__init__
方法。 正如本文档中所述,您只需使用__new__
。
在这里,当您创建新的MyInt
时,它会优先使用__init__
方法,这就是您收到错误的原因。 所以只需去掉__init__
方法并保留__new__
方法。
希望我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.