自定义元类控制类
# -*-coding:utf-8 -*-
# BY WANGCC
class Mymeta(type):
def __init__(self,class_name,class_bases,class_dir):
if not class_name.istitle():
raise TypeError('类名必须大写')
if '__doc__' not in class_dir or not class_dir['__doc__'].strip():
raise TypeError('必须有注释,且注释不能为空')
print('class_name',class_name)
print('class_bases',class_bases)
print('class_dir',class_dir)
class Chinese(object,metaclass=Mymeta):
'''
默认metaclass = type 这里我们让它继承自己定义的元类metaclass = Mymeta
里我们只要定义类'Chinese'就会触发自定义元类Mymeta的执行
所有自定义元类里面必须有__init__方法, 同时我们也可以对类名的大小写和类的名称空间的文档注释进行控制是否有写入
'''
country= 'China'
def __init__(self,name,age):
self.name=name
self.age=age
def talk(self):
print("%s is talking "%self.name )
obj=Chinese('egon',age=18,)
print(obj.__dict__)
ps:感觉这个和装饰器有些类似,周末需要在学习一下这个。
网友评论