type(类名,由父类名称组成的元组(针对继承情况下,可以为空),包含属性的字典(key和value)
元类创建class类,class创建实例对象(元类一种特殊的类)
type 是动态创建类
def upper_attr(class_name, class_parents,class_attr):
# 遍历属性字典,把不是__开头的属性名字变为大写
new_attr = {}
for name,value in class_attr.items():
if not name.startswith("__"):
new_attr[name.upper()] = value
# 调用 type 来创建一个类
return type(class_name, class_parents,new_attr)
class Foo(object, metaclass=upper_attr): #选择使用哪个类,不用type执行,默认type创建
bar = 'bip'
print(hasattr(Foo, 'bar'))
print(hasattr(Foo, 'BAR'))
f = Foo()
print(f.BAR)