使用__new__方法创建对象

时间:2014-03-05 15:54:45

标签: python

我正在尝试创建一个示例对象来测试__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()        

1 个答案:

答案 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