关于python元类
#class本质 class_name = "Teacher" class_body = """ def __init__(self,name,age): self.name=name self.age=age def say(self): print('%s says welcome to the Beijing' %self.name) """ class_dict = exec(class_body) bases = (object,) Teacher = type(class_name,class_body,bases)
指定元类
class MyMate(type): def __init__(self,name,bases,dic): print("run") if not dic.get("__doc__"): raise TypeError("类必须有文档注释!") if not name.istitle(): raise TypeError("类名必须大写开头!") super().__init__(name,bases,dic)
class Foo(object,metaclass=MyMate): pass
元类实现单例
class MyMeta(type): __instance = None def __init__(self,name,bases,dic): if not self.__instance: self.__instance = object.__new__(self) self.__init__(self.__instance) super().__init__(name, bases, dic) def __call__(cls): return cls.__instance class Player(metaclass=MyMeta): def __init__(self): print("创建播放器了") Player() Player()