文件名称:使用元类控制实例的创建-华为云大数据中台架构分享
文件大小:5.68MB
文件格式:PDF
更新时间:2024-07-01 05:00:45
Python cookbook 中文 参考
9.13 使用元类控制实例的创建 问题 你想通过改变实例创建方式来实现单例、缓存或其他类似的特性。 解决方案 Python 程序员都知道,如果你定义了一个类,就能像函数一样的调用它来创建 实例,例如: class Spam: def __init__(self, name): self.name = name a = Spam('Guido') b = Spam('Diana') 如果你想自定义这个步骤,你可以定义一个元类并自己实现 __call__() 方法。 为了演示,假设你不想任何人创建这个类的实例: class NoInstances(type): def __call__(self, *args, **kwargs): raise TypeError("Can't instantiate directly") # Example class Spam(metaclass=NoInstances): @staticmethod def grok(x): print('Spam.grok')