第十三章、元类(metaclass)

第十三章、元类(metaclass)

一、什么是元类

  • 在python中一切皆对象,那么我们用class关键字定义的类本身也是一个对象,负责产生该对象的类称之为元类,即元类可以简称为类的类

    class Foo:  # Foo=元类()
        pass
    

    114-元类metaclass-类的创建.png?x-oss-process=style/watermark

二、为什么用元类

  • 元类是负责产生类的,所以我们学习元类或者自定义元类的目的:是为了控制类的产生过程,还可以控制对象的产生过程

  • 本质:

  • 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来实例化产生类(对象)
    

img

  • 补充#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
    
posted @ 2019-09-03 22:44  得淼  阅读(116)  评论(0编辑  收藏  举报