10

次のように定義されたクラスがあります。

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

    def __init__(self):
        print "INIT"

それを使用すると、次の出力が得られます。

cl = Client()
# INIT

__new__は呼び出されていません。なんで?

4

2 に答える 2

7

あなたの答えを読んだ後、私はそれを改善します

class Client(object):
    def __new__(cls):
        print "NEW"
        return super(Client, cls).__new__(cls)
    def __init__(self):
        print "INIT"

c = Client()出力するように

NEW
INIT

意図した通り。

于 2012-09-28T11:25:37.847 に答える
7

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__

于 2012-09-28T10:35:01.717 に答える