![](/img/trans.png)
[英]Why does super().__init__ not work when subclassing threading.Thread?
[英]Why does subclassing change the __init__ signature?
>>> map(int, ["1", "2"], kw=True)
TypeError: map() takes no keyword arguments
但是当子类化时
>>> class Map(map):
... pass
...
>>> Map(int, ["1", "2"], whydoesthiswork=True)
<__main__.Map at 0x10fe48700>
为什么这现在接受关键字参数? 它不应该只是从父级继承__init__
吗?
我不知道为什么,但是map.__new__
特别只拒绝关键字 arguments如果被实例化的 class 本身是map
本身
if (type == &PyMap_Type && !_PyArg_NoKeywords("map", kwds))
return NULL;
这基本上是 C 级的等价物
def __new__(cls, *args, **kwargs):
if cls is map and kwargs:
raise TypeError
...
我能够追踪此代码的最远时间是此合并,其中包括一个更改,当此版本的map
仍然是itertools.imap
时,该更改将此类检查添加到一堆 itertools 类型。 其中一个提交消息是“错误 #1486663:不要拒绝关键字 arguments 用于内置类型的子类。”,这似乎是指来自旧(现已消失?)跟踪器的错误,但不清楚为什么拒绝关键字 arguments 曾经被认为是一个错误 - 如果子类想要采用关键字 arguments 超类不采用,他们不应该将这些 arguments 转发给超类__new__
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.