类的初始化和创建:__init__ 、__new__
方法一:
class MyLover: __instance = None __is_first_init = False def __new__(cls, *args, **kwargs): if not cls.__instance: MyLover.__instance = super().__new__(cls) return cls.__instance def __init__(self, name): if not self.__is_first_init: self.__is_first_init = True self.name = name else: print("对不起{},我已经有老婆了{},你不是我老婆".format(name, self.name)) def show_my_lover(self): print("我的老婆是:", self.name + " ") lover = MyLover("allin") lover.show_my_lover() lover1 = MyLover("admin") lover1.show_my_lover()
方法二:
def singletonDecorator(cls, *args, **kwargs): """ 单例装饰器 :param cls: :param args: :param kwargs: :return: """ instance = {} def wrap_singleton(*args, **kwargs): if cls not in instance: instance[cls] = cls(*args, **kwargs) return instance[cls] return wrap_singleton @singletonDecorator class MyLover: def __init__(self, myLover): self._name = myLover def get_name(self): print("我的老婆是:{}".format(self._name)) m1 = MyLover("allin") m1.get_name() m2 = MyLover("admin") m2.get_name()
instance声明为一个字典,利用它的key的唯一性,这里面的cls其实就是类初始化后的instance的地址,可以id(cls)