zoukankan      html  css  js  c++  java
  • 9.4(day30)元类,单例模式,单例模式的四种实现方式

    第一种方法:通过类的绑定方法

    当用户输入端口,实例化产生新对象

    当用户不输入端口和地址,每次拿到的对象,都是同一个

    class Sql():

    instance = None

    def init(self,port,host):

    self.port = port

    self.host = host

    @classmethod

    def get_sigoleton(cls):

    # import settings

    if not cls.instance:

    cls.instance = cls(3306,'127.0.0.1')

    return cls.instance

    # 每次调用get_sigoleton 拿到的都是同一个

    p1 = Sql.get_sigoleton()

    p2 = Sql.get_sigoleton()

    print(p1)

    print(p2)

    第二种方式:装饰器

    def get_sigoleton(func):

    import settings

    instance = func(settings.PORT, settings.HOST)

    def wrapper(*args,**kwargs):

    if len(args)!=0 or len(kwargs)!=0:

    res = func(*args,**kwargs)

    return res

    else:

    return instance

    return wrapper

    @get_sigoleton # 相当于:Spl=get_sigoleton(Spl)

    class Sql():

    instance = None

    def init(self,port,host):

    self.port = port

    self.host = host

    s1 = Sql()

    s2 = Sql()

    print(s1)

    print(s2)

    print(p1)

    print(p2)

    第三种方式:元类

    class Mymeta(type):

    def init(self,name,bases,dic):

    import settings

    self.instance = self(settings.PORT,settings.HOST)

    def call(self,*args,**kwargs):

    if len(args)!=0 or len(kwargs)!=0:

    obj = object.new(self)

    obj.init(*args,**kwargs)

    return obj

    else:

    return self.instance

    class Sql(metaclass=Mymeta):

    def init(self,port,host):

    self.port = port

    self.host = host

    s1 = Sql()

    s2 = Sql()

    print(s1)

    print(s2)

    第四种方式:模块

    写一个模块

    from XXX import 对象名

    class Sql:
    def init(self,port,host):
    self.port = port
    self.host = host
    s1 = Sql('默认值','默认值')

    def test1():
    from XXX import 对象名 # 对象已经生成

    print(对象名)
    

    def test2():
    from XXX import 对象名 # as XXX 重命名
    print(对象名)
    test1()
    test2()

  • 相关阅读:
    TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
    理论基础+实战控制台程序实现AutoFac注入
    C# class 浅拷贝 与 深拷贝
    给定一个矩阵 A, 返回 A 的转置矩阵。
    [弹出消息] C#ShowMessageBox帮助类
    [弹出消息] C#MessageBox帮助类 (转载)
    [XML] C#XMLProcess操作Xml文档的帮助类 (转载)
    [XML] C# XmlHelper操作Xml文档的帮助类 (转载)
    [XML] resources的Xml配置文件 (转载)
    [XML] Resource帮助类
  • 原文地址:https://www.cnblogs.com/jiann/p/11529518.html
Copyright © 2011-2022 走看看