使用__new__方法创建对象



我正在尝试创建一个示例对象来测试__new____init__方法。

这是我的示例代码。当我运行这个-我看到"Its been created"消息,而没有看到"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()        

__new__需要返回该类的一个实例(请参阅文档)。在这里,您实际上要做的是返回NoneType上的实例(因为没有显式返回值的函数返回None(在本例中返回"the",因为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__并不能保证每次都在每个实例上调用。

最新更新