跳转至

单例


class Singleton:
    """单例模式且只初始化一次"""

    instance = None
    init = False

    def __new__(cls, *args, **kwargs):
        """单例"""

        if cls.instance is None:
            # 调用基类object进行实例,并用instance记录实例地址
            cls.instance = object.__new__(cls)  # 也可用 super() 替换 object, 是一样的
        # 记录地址以后,后续的实例化对象操作都返回这个最开始的实例地址
        return cls.instance

    def __init__(self):
        """初始化一次"""

        if self.init:
            return
        print('初始化')
        self.init = True


def main():
    dog = Singleton()
    cat = Singleton()
    pig = Singleton()

    print(id(dog) == id(cat) == id(pig))


if __name__ == '__main__':
    main()

输出:

初始化
True