# 如何自定义元类来控制类的产生
# 自定义的类的元类属性即便不写 也默认为type
class Test(metaclass=type):
pass
# 如果想用自定义的元类来产生类,将该metaclass赋值为定制的元类名即可
# 自定义元类:
# 只有继承了type类的类才是元类
class Mymeta(type):
pass
# 调用元类产生类会发生的三件事:(与调用类产生对象的步骤一致)
# 1、先生成一个空对象
# 2、调用元类下的__init__方法,完成初始化对象的操作
# 3、返回一个初始化好的对象
定制元类来控制类的产生,实际上就控制着class机制的第四个步骤(通过元类来创建类)
案例:
定制元类来控制类名首字母必须大写,类体内必须有文档,否则报错,无法创建类
class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):
if not class_name.istitle():
raise NameError('类名首字母必须大写!')
if not class_dic.get('__doc__'):
raise TypeError('类体内必须有文档注释')
class Test(metaclass=Mymeta):
pass
# TypeError: 类体内必须有文档注释