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

    class MySQL:
    __sign = None
    def __init__(self):
    self.host = "127.0.0.1"
    self.port = 3306

    @classmethod
    def signleton(cls):
    if not cls.__sign:
    obj = cls()
    cls.__sign = obj
    return cls.__sign

    def conn(self):
    pass

    m1 = MySQL.signleton()
    m2 = MySQL.signleton()
    print(m1 is m2,"1")

    #但是这样必须调用类方法sighlenton来实例化。

    """
    通过元类实现单例模式
    """


    class MySQLmeta(type):
    __sign = None

    def __call__(self, *args, **kwargs):
    if not MySQLmeta.__sign:
    obj = object.__new__(self)
    self.__init__(obj, *args, **kwargs)
    MySQLmeta.__sign = obj
    return MySQLmeta.__sign


    class MySQL(metaclass=MySQLmeta):
    def __init__(self):
    self.host = "127.0.0.1"
    self.port = 3306

    def conn(self):
    pass

    m1 = MySQL()
    m2 = MySQL()
    print(m1 is m2,"2")


    class MySQLmeta(type):

    def __init__(self, class_name, class_bases, class_dict):
    super(MySQLmeta, self).__init__(class_name, class_bases, class_dict)
    self.__sign = None

    def __call__(self, *args, **kwargs):
    if not self.__sign:
    obj = object.__new__(self)
    self.__init__(obj, *args, **kwargs)
    self.__sign = obj
    return self.__sign


    class MySQL(metaclass=MySQLmeta):
    def __init__(self):
    self.host = "127.0.0.1"
    self.port = 3306

    def conn(self):
    pass

    m1 = MySQL()
    m2 = MySQL()
    print(m1 is m2,"3")

    """
    通过new方法实现单例模式
    """

    class MySQL(metaclass=MySQLmeta):
    __sign = None

    def __new__(cls, *args, **kwargs):
    if not cls.__sign:
    obj = super().__new__(cls, *args, **kwargs)
    cls.__sign = obj
    return cls.__sign

    def __init__(self):
    self.host = "127.0.0.1"
    self.port = 3306

    def conn(self):
    pass

    m1 = MySQL()
    m2 = MySQL()
    print(m1 is m2,"4")
  • 相关阅读:
    奖学金 题解
    大数加法
    删除倒数第 N 个节点
    css中行内元素默认间隙解决方案
    vuecli3项目中优化lodash/moment使用
    谷歌浏览器input输入框自动填充数据
    vuecli3首页白屏优化
    highcharts开发交易所的行情走势图
    react-native使用flatlist上拉加载下拉刷新
    放大预览图片不失真
  • 原文地址:https://www.cnblogs.com/walle-zhao/p/10775964.html
Copyright © 2011-2022 走看看