代码之家  ›  专栏  ›  技术社区  ›  David542

创建新类实例的替代方法[复制]

  •  -3
  • David542  · 技术社区  · 5 年前

    通常,可以使用以下内容创建实例:

    class New:
        def __new__(cls, *args, **kwargs):
            # placeholder
            return super().__new__(cls)
        def __init__(self, name):
            self.name = name
    
    >>> n=New('bob')
    >>> n
    <__main__.New object at 0x103483550>
    

    这里的幕后发生了什么?例如,类似于:

    new_uninitialized_obj = object.__new__(New)
    new_initialized_obj = new_uninitialized_obj.__init__("Bob")
    

    new 然后 init

    1 回复  |  直到 5 年前
        1
  •  -1
  •   David542    5 年前

    __init__ instance 在中创建的 __new__ ,因此可以执行以下操作来创建新实例并对其进行初始化:

    new_obj = object.__new__(New)
    # We can see it creates a new object of class `New`
    >>> new_obj
    <__main__.New object at 0x103483e10>
    >>> new_obj.__dict__
    {}
    
    new_obj.__init__("Bob")
    # now we update the object attributes based on init
    >>> new_obj.__dict__
    {'name': 'Bob'}