我有一个像这样定义的类:
class Client():
def __new__(cls):
print "NEW"
return cls
def __init__(self):
print "INIT"
Run Code Online (Sandbox Code Playgroud)
当我使用它时,我得到以下输出:
cl = Client()
# INIT
Run Code Online (Sandbox Code Playgroud)
__new__没有被召唤.为什么?
读完答案之后,我就改进了
class Client(object):
def __new__(cls):
print "NEW"
return super(Client, cls).__new__(cls)
def __init__(self):
print "INIT"
Run Code Online (Sandbox Code Playgroud)
这样c = Client()输出
NEW
INIT
Run Code Online (Sandbox Code Playgroud)
如预期.
类必须从明确继承object,以便__new__调用。重新定义,Client因此它看起来像:
class Client(object):
def __new__(cls):
print "NEW"
return cls
def __init__(self):
print "INIT"
Run Code Online (Sandbox Code Playgroud)
__new__ 现在将在按以下方式使用时被调用:
cl = Client()
# NEW
Run Code Online (Sandbox Code Playgroud)
请注意,__init__在这种情况下将永远__new__不会调用__new__它,因为它不会调用超类的返回值。
| 归档时间: |
|
| 查看次数: |
2531 次 |
| 最近记录: |