次のように定義されたクラスがあります。
class Client():
def __new__(cls):
print "NEW"
return cls
def __init__(self):
print "INIT"
それを使用すると、次の出力が得られます。
cl = Client()
# INIT
__new__
は呼び出されていません。なんで?
次のように定義されたクラスがあります。
class Client():
def __new__(cls):
print "NEW"
return cls
def __init__(self):
print "INIT"
それを使用すると、次の出力が得られます。
cl = Client()
# INIT
__new__
は呼び出されていません。なんで?
あなたの答えを読んだ後、私はそれを改善します
class Client(object):
def __new__(cls):
print "NEW"
return super(Client, cls).__new__(cls)
def __init__(self):
print "INIT"
c = Client()
出力するように
NEW
INIT
意図した通り。
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__