__new__
需要返回类的一个实例(见docs)。你在这里有效地做的是在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__
is not guaranteed to be called是很重要的。
呃,你为什么要定义'__del__',你可能不想这么做...... – SingleNegationElimination