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

use*_*762 2 python

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

假设,我希望每个新创建的对象都以包含自身的列表开头.

>> class A:
      *magic*

>> a = A()
>> print a

[<__main__.A instance at 0x01234567>]
Run Code Online (Sandbox Code Playgroud)

可能它可以通过__new__某种方式覆盖方法来完成,但是如何?

Mar*_*ers 5

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

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

演示:

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

请注意,__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]
Run Code Online (Sandbox Code Playgroud)