qinkwl

覃空万里

导航

魔术方法

魔术方法

new()

new()被用来创建一个类的实例对象
Python 中,创建一个新的实例一般是通过调用类的构造函数 __init__() 来完成的。然而,类名()创建对象时,在自动执行 __init__()方法前,会先执行 object.__new__方法,在内存中开辟对象空间并返回该对象。然后,Python 才会调用 __init__() 方法来对这个新实例进行初始化。

class Person(object):
    # 其中,cls参数表示类本身,*args 和 **kwargs参数用于接收传递给构造函数的参数。
    def __new__(cls, *args, **kwargs):
        print("__new__方法执行")
        # return object.__new__(cls)

    def __init__(self, name, age):
        print("__init__方法执行")
        self.name = name
        self.age = age

yuan = Person("yuan", 23)

_new__() 方法的主要作用是创建实例对象,它可以被用来控制实例的创建过程。相比之下,__init__() 方法主要用于初始化实例对象。

__new__() 方法在设计模式中常常与单例模式结合使用,用于创建一个类的唯一实例。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。

class Singleton:
    _isinstance = None

    def __new__(cls, *args, **kwargs):
        if not cls._isinstance:
            cls._isinstance = object.__new__(cls)
        return cls._isinstance

    def __init__(self, name):
        print("执行__init__")
        self.name = name


s1 = Singleton("aa")
s2 = Singleton("aabb")

print(id(s1), id(s2))   # id相同
print(s1.name)          # aabb

getitem

setitem

delitem

contains

posted on 2024-12-26 11:58  覃空万里  阅读(17)  评论(0)    收藏  举报