• 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()

  • 相关阅读:
    github打开慢,甚至打不开
    在使用confluent-kafka-go 时遇到如下问题
    Istio Routing极简教程
    kubelet证书过期解决方法
    工具类docker for k8s
    selenium jar包 的下载地址,各版本都有
    使用TestNG进行多浏览器,跨浏览器和并行测试
    简单聊聊TestNG中的并发
    清除Git仓库多余文件及其历史记录 
    【MAVEN】maven系列--pom.xml标签详解
  • 原文地址:https://www.cnblogs.com/jiann/p/11529518.html
Copyright © 2020-2023  润新知