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)

    人生就是要不断折腾
  • 相关阅读:
    iOS APP程序启动原理
    关于组合式继承和寄生式继承的个人理解
    servlet session 相关
    hadoop配置远程客户端
    将普通工程转为mvn标准工程(main resources)
    log4j2 配置文件
    mvn生成runnablejar 的方法
    普通工程转为mvn工程
    java ReentrantLock可重入锁功能
    在mapreduce中做分布式缓存的问题
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/12792101.html
Copyright © 2011-2022 走看看