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

  • 相关阅读:
    第十三周助教小结
    记事本
    第十二周助教小结
    与周老师会谈之后的感想
    第十一周总结
    第十周助教总结
    听周筠老师一席话,受益匪浅
    2020软件工程作业04
    2020软件工程作业02
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/jiann/p/11529518.html
Copyright © 2020-2023  润新知