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