python中自定义元类控制类的创建

自定义元类控制类
# -*-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:感觉这个和装饰器有些类似,周末需要在学习一下这个。

    原文作者:wangcc_sd
    原文地址: https://www.jianshu.com/p/47eb1ff774cf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞