为什么我的Python类没有调用__new__?

时间:2012-09-28 10:35:02

标签: python python-2.x

我有一个如此定义的类:

class Client():
    def __new__(cls):
        print "NEW"
        return cls

    def __init__(self):
        print "INIT"

当我使用它时,我得到以下输出:

cl = Client()
# INIT

__new__未被调用。为什么呢?

2 个答案:

答案 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__作为返回值。