为什么new
方法上没有类装饰器?例如:
class MyClass:
@classmethod
def __new__(cls, *args, **kwargs):
pass
这种方法如何在没有装饰器的情况下充当classmethod
?
它是特别特殊情况的。type.__new__
将在创建类时自动应用staticmethod
如果它发现您定义了__new__
而没有应用staticmethod
。(另外,__new__
应该是staticmethod
,而不是classmethod
。
请参阅文档:
调用以创建类cls的新实例。
__new__()
是一个静态方法(特殊情况,因此您不需要将其声明为这样(,它将请求实例的类作为其第一个参数......
和实施:
/* Special-case __new__: if it's a plain function,
make it a static function */
tmp = _PyDict_GetItemId(dict, &PyId___new__);
if (tmp != NULL && PyFunction_Check(tmp)) {
tmp = PyStaticMethod_New(tmp);
if (tmp == NULL)
goto error;
if (_PyDict_SetItemId(dict, &PyId___new__, tmp) < 0) {
Py_DECREF(tmp);
goto error;
}
Py_DECREF(tmp);
}