day33---作业

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__,完成初始化
# 返回一个初始化化得对象
原文地址:https://www.cnblogs.com/surpass123/p/12712282.html