1. 程式人生 > >Python利用元類來控制實例創建

Python利用元類來控制實例創建

解決 lan singleton blog 定制化 http none reat ins

問題:

改變實例創建方式,以此來實現單例模式,緩存或者其他類似的特性。

解決方法:

如果想定制化創建實例的過程,可以通過定制一個元類並以某種方式重新實現它的__call__()方法。

單例模式實現:

class Singleton(type):
    def __init__(self, *args, **kwargs):
        self.__instance = None
        super().__init__(*args, **kwargs)

    def __call__(self, *args, **kwargs):
        if self.__instance
is None: self.__instance = super().__call__(*args, **kwargs) return self.__instance else: return self.__instance class Spam(metaclass=Singleton): def __init__(self): print("Creating Spam") a = Spam() b = Spam() print(a is b) c = Spam() print
(a is c)

運行結果:

Creating Spam
True
True

創建緩存實例:(不使用元類方法鏈接:https://www.cnblogs.com/weswes/p/10007794.html)

Python利用元類來控制實例創建