我有一个如此定义的类:
class Client():
def __new__(cls):
print "NEW"
return cls
def __init__(self):
print "INIT"
当我使用它时,我得到以下输出:
cl = Client()
# INIT
__new__
未被调用。为什么呢?
答案 0 :(得分:6)
阅读完答案后,我用
进行了改进class Client(object):
def __new__(cls):
print "NEW"
return super(Client, cls).__new__(cls)
def __init__(self):
print "INIT"
以便c = Client()
输出
NEW
INIT
按预期。
答案 1 :(得分:5)
类必须从object
显式继承,才能调用__new__
。重新定义Client
所以它看起来像:
class Client(object):
def __new__(cls):
print "NEW"
return cls
def __init__(self):
print "INIT"
使用时会调用 __new__
,如:
cl = Client()
# NEW
请注意,在这种情况下永远不会调用__init__
,因为__new__
不会调用超类的__new__
作为返回值。