(Python)__ new__方法返回类实例以外的东西

时间:2013-11-26 15:55:26

标签: python

是否可能,如果是,那么怎么做,创建一个类的新对象会返回除对象本身以外的东西?

假设,我希望每个新创建的对象都以包含它自己的列表开始。

>> class A:
      *magic*

>> a = A()
>> print a

[<__main__.A instance at 0x01234567>]

可能可以通过某种方式覆盖__new__方法来完成,但是怎么做?

1 个答案:

答案 0 :(得分:5)

是的,__new__可以返回除新实例之外的其他内容:

class A(object):
    def __new__(cls, *args, **kw):
        instance = super(A, cls).__new__(cls, *args, **kw)
        return [instance]

演示:

>>> class A(object):
...     def __new__(cls, *args, **kw):
...         instance = super(A, cls).__new__(cls, *args, **kw)
...         return [instance]
... 
>>> A()
[<__main__.A object at 0x10f33f390>]

请注意,如果返回的对象类型不同,则不会调用__init__(因此isinstance(returned_value, A)False);这意味着永远不会在这里调用自定义A.__init__()!明确地称之为:

class A(object):
    def __new__(cls, *args, **kw):
        instance = super(A, cls).__new__(cls, *args, **kw)
        if hasattr(cls, '__init__'):
            instance.__init__(*args, **kw)            
        return [instance]