1、在元类中控制把自定义类的数据属性都变成大写
class Mymeta(type): def __new__(cls, class_name, class_bases, class_dic): new_class_dic = {} for k, v in class_dic.items(): if not callable(v) and not k.startswith('__'): 如果值不是一个可调用对象,且键不是以'__'开头 new_class_dic[k.upper()] = v else: new_class_dic[k] = v return type.__new__(cls, class_name, class_bases, new_class_dic) class Beast(metaclass=Mymeta): name = '姜春' age = 26 def __init__(self, gender): self.gender = gender def show(self): print(f""" 禽兽档案==> 姓名:{Beast.name} 年龄:{Beast.age} 性别:{self.gender} """) b = Beast('female') print(Beast.__dict__) # 创造b发生3件事(类(Beast)的调用==>Mymeta.__call__) # 1、调用Beast.__new__,产生一个空对象 # 2、调用Beast.__init__,完成初始化 # 3、返回一个初始化的对象 # Beast = Mymeta() ==> type.__call__ # 调用Mymeta.__new__,产生一个空对象 # 调用Mymeta.__init__,完成初始化 # 返回一个初始化化得对象