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)
网友评论