python的metaclass

元类一般用于创建类。在执行类定义时,解释器必须要知道这个类的正确的元类。解释器会先寻找类属性__metaclass__,如果此属性存在,就将这个属性赋值给此类作为它的元类。如果此属性没有定义,它会向上

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

元类一般用于创建类。在执行类定义时,解释器必须要知道这个类的正确的元类。解释器会先寻找类属性__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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120477.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据挖掘有哪些技术

    大数据挖掘有哪些技术  数据挖掘技术虽是一项新兴的数据处理技术,但其发展速度十分迅猛,至今已经形成了决策树、神经网络、统计学习、聚类分析、关联规则等多项数据挖掘技术,极大的满足了用户的需求。  1、决策树算法  决策树算法是分类和预测的常用技术之一,可用于深入分析分类问题,使用时,决策树能够利用预测理论对多个变量中进行分析,从而预测处任一变量的发展趋势和变化关系;除此以外,还能对变量发展趋势进行双向预测,既能进行正向预测,也能进行反向预测,因此具有方便灵活的优势。  2、神经网络算法  神经网络是将计算机技术与

    2022年6月29日
    23
  • ar面部识别_免费人脸识别sdk

    ar面部识别_免费人脸识别sdk如何看待Arcsoft 免费人脸认知引擎SDK?

    2022年4月21日
    41
  • ABA问题_乐观锁aba引发的实际问题

    ABA问题_乐观锁aba引发的实际问题ABA问题一.概述:二.什么是ABA问题?三.ABA问题的解决:原子引用:(存在ABA问题)带版本号的原子引用(解决ABA问题)一.概述:ABA问题是在多线程并发的情况下,发生的一种现象。上一次记录了有关CAS操作的一些知识,CAS通过比较内存中的一个数据是否是预期值,如果是就将它修改成新值,如果不是则进行自旋,重复比较的操作,直到某一刻内存值等于预期值再进行修改。而ABA问题则是在CAS操作中存在的一个经典问题,这个问题某些时候不会带来任何影响,某些时候却是影响很大的。二.什么是ABA问题?理解一

    2022年10月23日
    1
  • windows下如何安装Composer?

    windows下如何安装Composer?

    2021年10月20日
    113
  • 集成电路芯片半导体中英文对照术语词汇表「建议收藏」

    集成电路芯片半导体中英文对照术语词汇表「建议收藏」英语 中文 1-9   10gigabit 10Gb 1stNyquistzone 第一奈奎斯特区域 3Dfull‑waveelectromagneticsolver 3D全波电磁解算器 3-state 三态 4thgenerationsegmentedrouting 第四代分层布线技术 5Gcommercialization 5G商用 7seriesFPGA 7系列FPG

    2022年9月15日
    0
  • oracle创建表空间自动增长

    oracle创建表空间自动增长createtablespaceZB_TABLESPACEdatafile’ZB_TABLESPACE.dbf’size3200Mautoextendonnext5Mmaxsizeunlimited;https://www.cnblogs.com/liushuaibiao/p/10783986.html

    2022年7月27日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号