Calling __new__ when making a subclass of tuple
在Python中,当对元组进行子类化时,使用self作为参数调用
1 2 3 | class Row(tuple): def __new__(self, args): return tuple.__new__(self, args) |
但
1 2 | __new__(*args, **kwargs) from builtins.type Create and return a new object. See help(type) for accurate signature. |
号
以东十一〔五〕也说了同样的话:
1 2 | __new__(*args, **kwargs) Create and return a new object. See help(type) for accurate signature. |
那么,在
- 是通过
*args 吗? __new__ 是否有一些微妙之处,其签名可以随上下文而更改?- 或者,文档有误吗?
- 为什么
tuple.__new__ 方法没有self 或cls 作为第一个论据。 - 我该如何检查tuple类的源代码,亲自看看到底发生了什么。
-
Is it via
*args ? -
Does
__new__ have some subtlety where its signature can change with context? - Or, is the documentation mistaken?
-
Why the
tuple.__new__ method does not haveself orcls as first argument. -
How I might go about examining the source code of the
tuple class, to see for myself what's really going on.
小精灵
是否可以查看
我的问题不是这个问题的复制品,因为在这个问题中,所有的讨论都提到了以
在C中实现的函数和类型通常不能被检查,它们的签名总是像那个一样。
1 | __new__(cls[, sequence]) |
例如:
1 2 3 4 | >>> tuple.__new__(tuple) () >>> tuple.__new__(tuple, [1, 2, 3]) (1, 2, 3) |
号
不足为奇,这和叫
注意,
专用方法
我这么说是因为在你的
So how does
self get passed to__new__ in theRow class definition?
号
当您调用
号
你可以写你的
1 2 3 | class Row(tuple): def __new__(*args, **kwargs): return tuple.__new__(*args, **kwargs) |
这行得通,没什么不对的。如果你不关心这些论点,那是非常有用的。
号
不,
号
我会说它是不完整或模棱两可的。
号
它确实有,只是不出现在
号
您要查找的文件是
1 2 3 | static char *kwlist[] = {"sequence", 0}; /* ... */ if (!PyArg_ParseTupleAndKeywords(args, kwds,"|O:tuple", kwlist, &arg)) |
。
这里,
为便于参考,您查看了
对于
1 2 3 4 | class type(object) | type(object_or_name, bases, dict) | type(object) -> the object's type | type(name, bases, dict) -> a new type |
但这并不相关,因为
最后,尝试使用