元类是python面向对象编程里面很难理解的一个东西,所谓元类的就是类的类,它用来创建类,在python里面,类也是一个对象!!!.元类的作用就是动态的创建类.
在python里面type就是元类,我们所有的class定义类的语句都会被python解释为使用用type来创建一个类.
废话少说,首先看一下怎么用元类来解决一个动态创建类的需求,要求我们对于某一类型的类的满足某个条件的属性名字都变成大写!比如:
class test:
a = 1
b = 2
c = 3
然后test里面的属性是A,B,C。当然这个需求比较奇怪,我们完全可以手动的把类属性定义为大写,但是如果对于类的动态创建要求比较高的话,自己定义类就会很麻烦.这个以后再说.
代码如下:
class TestMetaclass(type):
def __new__(cls,name,bases,attrs):
print(attrs)
attr_names = [ (attr_name.upper(),value) for attr_name,value in attrs.items() if not attr_name.startswith('__')]
print(attr_names)
return super().__new__(cls,name,bases,attrs)
class Test(dict,metaclass = TestMetaclass):
f1 = 1
f2 = 2
sS