繁体   English   中英

为什么 *args 不能从覆盖 int 的 class 传递给 super().__init__()?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM