Cyk*_*ker 2 python inheritance class python-3.x
在Python 3中,定义子类时,为什么需要用作 的cls
第一个参数__new__
,而不用作 的self
第一个参数__init__
?
一个例子:
class MyClass(object):
def __new__(cls, *args, **kwargs):
return super(MyClass, cls).__new__(cls, *args, **kwargs) # with `cls`
def __init__(self, *args, **kwargs):
return super(MyClass, self).__init__(*args, **kwargs) # without `self`
Run Code Online (Sandbox Code Playgroud)
当我比较这些函数时,我变得更加困惑:
>>> cls = object
>>> self = cls()
>>> cls.__new__ is self.__new__
True
>>> cls.__init__ is self.__init__
False
>>> self.__init__()
>>> cls.__init__()
Traceback (most recent call last): ...
Run Code Online (Sandbox Code Playgroud)
__new__
那么,这些结果之间和背后有何差异__init__
?哪些方法是绑定的,哪些是免费的?为什么可以打电话self.__init__()
却打不通cls.__init__()
?cls.__init__
方法是在cls
其自身中定义还是在其元类中定义?
归档时间: |
|
查看次数: |
2433 次 |
最近记录: |