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在线编辑word文档调用PageOffice实现并发控制
    [原创]Java动态填充word文档并上传到服务器
    mysql数据类型
    mysql 数据增删改查基本语句
    MYSQL中char 与 varchar 的区别
    MYSQL 同时执行多条SQL语句
    关于MyEclipse10编辑JSP卡顿现象
    鼠标悬停放大图片效果
    简单实现 飘浮 广告层特效
    简单实现 特效(董侨JonneyDong)
  • 原文地址:https://www.cnblogs.com/jiann/p/11529518.html
Copyright © 2011-2022 走看看