是否可能,如果是,那么怎么做,创建一个类的新对象会返回除对象本身之外的东西?
假设,我希望每个新创建的对象都以包含自身的列表开头.
>> class A:
*magic*
>> a = A()
>> print a
[<__main__.A instance at 0x01234567>]
Run Code Online (Sandbox Code Playgroud)
可能它可以通过__new__某种方式覆盖方法来完成,但是如何?
是的,__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)