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

  • 相关阅读:
    团队冲刺——第六天
    团队冲刺——第五天
    用户场景分析和第一阶个人计划。
    Java-web 学习感触一界面传值
    Java-web 学习感触一知识储备
    基于”Layui"框架构建前端页面
    HNC公司销售合同管理系统开发反思
    第十六周总结
    个人课程总结
    第十五周总结
  • 原文地址:https://www.cnblogs.com/jiann/p/11529518.html
Copyright © 2011-2022 走看看