#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()