【发布时间】:2016-07-25 14:48:37
【问题描述】:
我有一个类,我希望它接受同一个类的实例作为初始化;在这种情况下,它只会返回那个实例。
原因是我希望这个类接受无数的初始化值,然后后续代码可以将其用作具有已知属性的对象,而与它的初始化方式无关。
我想到了类似的东西:
class c(object):
def __new__(cls, *args, **kwargs):
if isinstance(args[0], c):
return args[0]
else:
return super(c, cls).__new__(cls, *args, **kwargs)
问题是我不希望__init__() 在以这种方式初始化时被调用。有没有其他办法?
谢谢!
【问题讨论】:
-
为什么不希望
__init__()被调用?如果__init__()被调用,但没有做任何事情,会好吗? -
__init__()应仅在 args[0] 不属于该类时调用 -
是的,您已经在问题中说明了这一点。但我问你:为什么这很重要?避免来电有多重要?您可以轻松地使调用在使用实例初始化时不执行任何操作,或者在使用其他值进行初始化时执行某些操作。
-
嗯,你是对的......出于某种原因,起初它看起来不太像pythonic,无法在两个不同的函数中检查两次
if子句,但它看起来比工厂或初始化更好在__new__中,并且比元分类更简单。谢谢大家!
标签: python class oop initialization