我正在尝试创建一个示例对象来测试__new__
和__init__
方法。
这是我的示例代码。当我运行时 - 我看到"Its been created"
msg并且看不到"Initialized"
& "Deleted"
消息。
class Test( object ):
def __new__(self):
print 'Its been Created'
def __init__(self):
print 'Its been Initialzed'
def __del__(self):
print 'Its been Deleted'
T = Test()
答案 0 :(得分:3)
__new__
需要返回该类的实例(请参阅docs)。你在这里有效地做的是在NoneType
上返回实例(因为没有显式返回值的函数返回None
(在这种情况下为''',因为None
是一个特例Python)中的单例,然后调用该对象的__init__
。解决这个问题的最简单方法是:
class Test(object):
def __new__(cls):
print 'Creating'
return super(Test, cls).__new__(cls)
def __init__(self):
print 'Intializing'
def __del__(self):
print 'Deleting'
这会导致Test.__new__()
返回Test
的超类'(在这种情况下为object
)__new__
方法的结果作为新创建的实例。
如果您尝试以下操作,它可能会帮助您了解正在发生的事情:
class A(object):
def __new__(cls):
print 'A.__new__'
return super(A, cls).__new__(cls)
def __init__(self):
print 'A.__init__'
def __del__(self):
print 'A.__del__'
class FakeA(object):
def __new__(cls):
print 'FakeA.__new__'
return A.__new__()
def __init__(self):
print 'FakeA.__init__'
def __del__(self):
print 'FakeA.__del__'
a = A()
fa = FakeA()
del a
del fa
但是,每次每个实例都需要注意__del__
is not guaranteed to be called。