码迷,mamicode.com
首页 > 编程语言 > 详细

Python利用元类来控制实例创建

时间:2018-11-24 20:55:51      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:__call   target   log   问题   tac   metaclass   html   title   col   

 

问题:

改变实例创建方式,以此来实现单例模式,缓存或者其他类似的特性。

 

解决方法:

如果想定制化创建实例的过程,可以通过定制一个元类并以某种方式重新实现它的__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利用元类来控制实例创建

标签:__call   target   log   问题   tac   metaclass   html   title   col   

原文地址:https://www.cnblogs.com/weswes/p/10013276.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!