第十三章、元类(metaclass)
一、什么是元类
-
在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象,负责产生该对象的类称之为元类,即元类可以简称为类的类
class Foo: # Foo=元类() pass
二、为什么用元类
-
元类是负责产生类的,所以我们学习元类或者自定义元类的目的:是为了控制类的产生过程,还可以控制对象的产生过程
-
本质:
-
exec()
l={} exec(''' school='oldboy' def __init__(self,name): self.name=name def score(self): print('分数是100') ''',{},l) def __init__(self,name): self.name=name Person=type('Person',(object,),{'school':'oldboy','__init__':__init__}) #class 底层就是调用type来实例化产生类(对象)
-
补充#exec() eval()的区别
-
f = "3+6+9+8" s = eval(f) print(s) -------------------------- 26
-
code = ''' def func(): print('test') return 555 func() ''' f = exec(code) print('---'*5) print(f) ------------------------------- test --------------- None