zoukankan      html  css  js  c++  java
  • python 元类与定制元类

    1:元类

      元类:类的创建与管理者

      所有类的元类是type

      class a:
          pass
    
      print(type(a))

      结果:<class 'type'>

    2:定制元类

      类的实例化过程:(可看类的基础与要点

              1)调用__new__()创建实例

              2)调用__init__()初始化上面创建出来的实例

      所以:定制实例便是改变父类的__new__()或__init__()方法

      例子:

     1 class MyMeta(type):
     2     def __init__(self,name,bases,dicts):
     3         print('Init Instance.')
     4 
     5     def __new__(cls,name,bases,dicts):
     6         dicts['info'] = lambda self:print('Djx.')   #追加实例方法info()
     7         res = type.__new__(cls,name,bases,dicts)    #调用父类type的new方法实例化实例
     8         res.company = 'MaiZi'                       #追加属性
     9         return res                                  #返回实例
    10 
    11 class custom(metaclass=MyMeta):                     #用关键字表明元类不是type而是MyMeta
    12     pass
    13 
    14 if __name__ == '__main__':
    15     cus = custom()
    16     cus.info()
    17     print(cus.company)
    18 
    19 
    20 #Python2.x的写法
    21 #class cus:
    22  #   __metaclass__ = MyMeta
    23   #  pass

      运行结果:    

          Init Instance.
          Djx.
          MaiZi

  • 相关阅读:
    火币Huobi API Websocket
    火币Huobi API
    OKEX API(Websocket)
    OKEX API
    Linux下Miniconda量化环境安装
    Numba:高性能Python编译器
    十进制和十六进制互相转换
    JavaScript 原型和原型链
    Redux 进阶之 react-redux 和 redux-thunk 的应用
    Vue 中 $nextTick() 的应用
  • 原文地址:https://www.cnblogs.com/pengsixiong/p/4837214.html
Copyright © 2011-2022 走看看