• python的metaclass


    元类一般用于创建类。在执行类定义时,解释器必须要知道这个类的正确的元类。解释器会先寻找类属性__metaclass__,如果此属性存在,就将这个属性赋值给此类作为它的元类。如果此属性没有定义,它会向上查找父类中的__metaclass__.如果还没有发现__metaclass__属性,解释器会检查名字为__metaclass__的全局变量,如果它存在,就使用它作为元类。否则, 这个类就是一个传统类,并用 types.ClassType 作为此类的元类。

    在执行类定义的时候,将检查此类正确的(一般是默认的)元类,元类(通常)传递三个参数(到构造器): 类名,从基类继承数据的元组,和(类的)属性字典。

    元类何时被创建?

    #!/usr/bin/env python  
      
    print '1. Metaclass declaration'  
    class Meta(type):  
        def __init__(cls, name, bases, attrd):  
            super(Meta,cls).__init__(name,bases,attrd)  
            print '3. Create class %r' % (name)  
      
    print '2. Class Foo declaration'  
    class Foo(object):  
        __metaclass__=Meta  
        def __init__(self):  
            print '*. Init class %r' %(self.__class__.__name__)  
      
    # 何问起 hovertree.com
    
    print '4. Class Foo f1 instantiation'  
    f1=Foo()  
      
    print '5. Class Foo f2 instantiation'  
    f2=Foo()  
      
    print 'END'  

    输出结果:

    1. Metaclass declaration
    2. Class Foo declaration
    3. Create class 'Foo'
    4. Class Foo f1 instantiation
    *. Init class 'Foo'
    5. Class Foo f2 instantiation
    *. Init class 'Foo'
    END

    可见在类申明的时候,就执行了__metaclass__中的方法了,以后在定义类对象的时候,就只调用该类的__init__()方法,MetaClass中的__init__()只在类申明的时候执行了一次。

    摘自《Python核心编程》

    推荐:http://www.cnblogs.com/roucheng/p/pythonyunsuan.html

  • 相关阅读:
    赋值问题
    构造方法的作用
    this的使用
    三目运算符和形参的使用
    构造方法作用:给所有对象进行相同的初始化操作
    成员变量和局部变量
    相关开发的书籍名汇集
    html ---- web sql 例子
    让input表单输入框不记录输入过信息的方法
    css实现两端对齐的3种方法
  • 原文地址:https://www.cnblogs.com/roucheng/p/pythonmetaclass.html
Copyright © 2020-2023  润新知