Python学习

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

2019-03-08  本文已影响0人  wangcc_sd
自定义元类控制类
# -*-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:感觉这个和装饰器有些类似,周末需要在学习一下这个。

上一篇下一篇

猜你喜欢

热点阅读