案例1:
class Person:
def __new__(cls, *args, **kwargs):
print "called"
return super(Person, cls).__new__(cls, *args, **kwargs)
p=Person()
案例2:
class Person(object):
def __new__(cls, *args, **kwargs):
print "called"
return super(Person, cls).__new__(cls, *args, **kwargs)
p=Person()
在第一种情况下,不会调用__new__()
方法,但在第二种情况下会调用。你知道吗
如果它没有被调用,那么如何创建Person
对象?你知道吗
我猜它和Python2中的new and old style classes有关:
在Python3中,行为是相同的,无论是否显式继承自
object
:当从3.x调用时,它们应该打印“called”两次
我在找文件,最后在这里找到了: https://staging2.python.org/dev/peps/pep-0253/
再加上@devforfu的答案,在过去,
__new__
并不存在。它是随着新样式类的添加而添加的。你知道吗相关问题 更多 >
编程相关推荐