zoukankan      html  css  js  c++  java
  • python单例模式

    类的初始化和创建:__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)

    人生就是要不断折腾
  • 相关阅读:
    程序员修炼之道阅读笔记02
    第十五周课堂练习-查找最长单词链
    文件读写总结
    第十五周
    暑假总结1
    软件工程课程总结
    第十六周总结
    用户场景分析
    学期课后个人总结
    第十五周总结
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/12792101.html
Copyright © 2011-2022 走看看