【问题标题】:Alternate ways to create a new class instance [duplicate]创建新类实例的替代方法[重复]
【发布时间】:2019-10-15 03:45:09
【问题描述】:

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

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 转换为实例对象。这实际上是如何完成的?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    __init__ 不会返回任何内容,只会更新在__new__ 中创建的instance,因此您可以执行以下操作来创建新实例并对其进行初始化:

    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'}
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多