最近我一直在研究__new__
,我读过很多代码,其中__new__
代替__init__
。有时我认为两者都有效,但我不知道为什么原作者使用__new__
。为什么我应该在这个例子中使用__new__而不是__init__?
有人可以解释为什么下面的代码使用__new__
而不是__init__
?我想要这个例子的原因。我知道__new__
和__init__
之间的区别,但我不知道为什么__new__
在这里使用。
class MiniSubtest(object):
def __new__(cls, *args, **kargs):
self = super(MiniSubtest, cls).__new__(cls)
ret = None
if args is None:
args = []
try:
ret = self.test(*args, **kargs)
finally:
if hasattr(self, "clean"):
self.clean()
return ret
,我想,如果我使用__init__,它仍然有效,乳清它使用__new__?
[Python使用\ _ \ _ new \ _ \ _和\ _ \ _ init \ _ \ _?]的可能重复(https://stackoverflow.com/questions/674304/pythons-use-of -new-and-init) –
'__init__'和'__new__'不是一样的。 '__new__'是实际创建类的实例的方法。它返回一个新的类实例。一旦'__new__'创建实例,它就会通过通常名为'self'的第一个参数传递给'__init__'。 '__init__'是允许您通过初始化属性来定制实例的方法。 –
Yuck。不要在这里上课;使用工厂函数 – ppperry