python設計モード-単一モードメタクラス
1429 ワード
python環境
概要
メタクラスはクラスのクラスであり、すなわちクラスはそのメタクラスのインスタンスである.クラスの定義はそのメタクラスによって決まり、メタクラスを通じてプログラマはカスタムクラスを作成することができます.pythonではすべてがオブジェクトです.例えばa=5ではtype(a)が返され、これは変数aがintタイプであることを意味し、type(int)を続けると返され、同様にintがtypeクラスであることを意味する.このときtypeクラスはintクラスのメタクラスである.
メタベースの使い方
メタクラスと単一例
メタクラスはクラスのクラスであり、メタクラスがクラスのインスタンス化を制御している.これにより、クラスの単一のモードを実現することができる.
メタクラス実装単例モード
python==3.7.2
概要
メタクラスはクラスのクラスであり、すなわちクラスはそのメタクラスのインスタンスである.クラスの定義はそのメタクラスによって決まり、メタクラスを通じてプログラマはカスタムクラスを作成することができます.pythonではすべてがオブジェクトです.例えばa=5ではtype(a)が返され、これは変数aがintタイプであることを意味し、type(int)を続けると返され、同様に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)