美文网首页
python设计模式 - 单例模式元类

python设计模式 - 单例模式元类

作者: RedGecko | 来源:发表于2019-02-11 21:18 被阅读28次

    python 环境

    python==3.7.2
    

    简介

    元类是一个类的类,也就是说该类是它的元类的实例。类的定义由它的元类决定,通过元类,程序员可以创建自定义类。在 python 中一切皆为对象。比如 a = 5, 则 type(a) 返回 <type 'int'>,这意味着变量 a 为 int 类型,如果继续 type(int) 则返回 <type 'type'>,同理这意味着 int 为 type 类。此时,type 类即为 int 类的元类。

    元类基础用法

    class MyInt(type):
        def __call__(cls, *args, **kwargs):
            return type.__call__(cls, *args, **kwargs)
    
    
    class NewInt(metaclass=MyInt):
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __str__(self):
            return str(self.x + self.y)
    
    
    if __name__ == '__main__':
        a = NewInt(4, 5)
        print(a)
    

    元类与单例

    元类是类的类,即元类控制着类的实例化。借此,可以实现类的单例模式。

    元类实现单例模式

    import sqlite3
    
    
    class MetaSingleton(type):
        _instances = {}
    
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(MetaSingleton, cls).__call__(*args, **kwargs)
            return cls._instances[cls]
    
    
    class Database(metaclass=MetaSingleton):
        connection = None
    
        def connect(self):
            if not self.connection:
                self.connection = sqlite3.connect('db.sqlite3')
            return self.connection.cursor()
    
    
    if __name__ == '__main__':
        db1 = Database().connect()
        db2 = Database().connect()
        print(db1)
        print(db2)
    

    相关文章

      网友评论

          本文标题:python设计模式 - 单例模式元类

          本文链接:https://www.haomeiwen.com/subject/khqceqtx.html