zoukankan      html  css  js  c++  java
  • 第十三章、元类(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
      
  • 相关阅读:
    2017普及组D1T3 洛谷P3956 棋盘
    2017提高组D1T1 洛谷P3951 小凯的疑惑
    Title
    Title
    Title
    Title
    Title
    Title
    Title
    Title
  • 原文地址:https://www.cnblogs.com/demiao/p/11456236.html
Copyright © 2011-2022 走看看