在Python3的版本中,创建类的时候可以填入metaclass属性,它的作用是用metaclass指定的对象来构建这个类具体内容,来看一个栗子
def upper_attrs(classname, parents, attrs):
newAttrs = {}
for name, value in attrs.items():
if not name.startswith("__"):
newAttrs[name.upper()] = value
return type(classname, parents, newAttrs)
class Person(metaclass=upper_attrs):
beer = "hapi"
p = Person()
print(hasattr(p, "beer"))
print(hasattr(p, "BEER"))
print(p.BEER)
通过指定metaclass,我们修改了类的属性