为什么在这个例子中我应该使用__new__而不是__init__?

2024-09-27 18:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近一直在研究__new__,我读了很多代码,其中使用__new__代替{}。有时我认为这两种方法都有效,但我不知道为什么原作者使用__new__。在

有人能解释一下为什么下面的代码使用__new__而不是{}?我想知道这个例子的原因。我知道__new____init__之间的区别,但我不知道这里为什么使用__new__。在

Example

    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

我想如果我用初始化,它仍然有效,为什么它用了新?在


Tags: 方法代码selfcleannonenewifargs
2条回答

这将控制新实例的创建和返回:

  • 首先创建实例。在
  • try子句在测试新实例期间捕获异常。在
  • 然后,如果出现异常,它将清理实例的垃圾。在
  • 然后它只返回实例。在

所以它决定返回一个实例或丢弃它。在

__new__用于控制新实例的创建并要求您返回它,而{}只允许您初始化已创建的实例

我的猜测是self.test根据参数返回不同类型的实例

相关问题 更多 >

    热门问题