首页 > 编程语言 >python——metaclass

python——metaclass

时间:2023-08-27 10:31:53浏览次数:35  
标签:__ python 元类 print Foo metaclass class


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

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核心编程》


标签:__,python,元类,print,Foo,metaclass,class
From: https://blog.51cto.com/u_5173797/7251146

相关文章

  • Python练习:IP掩码换算
       b='1'c=len(b)whilec<9:d=b.ljust(8,'0')#两种输出格式print(f"二进制{d}相当于十进制{int(d,2)}")print("二进制%s相当于十进制%s"%(d,int(d,2)))b=b+'1'c=len(b)  ......
  • Python学习日记
    importrequestsimportreimportosfrombs4importBeautifulSoupurl='https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%B1%ED%C7%E9%B0%FC&fr=ala&ala=1&alatpl=normal&p......
  • Python 主流RPC 框架有哪些
    PythonRPC框架的使用越来越广泛。在这篇博客中,我将介绍三个主流的PythonRPC框架:gRPC、Thrift和RPyC,并对它们的特点进行比较。 RPC、Thrift和RPyC,并对它们的特点进行比较。框架开发公司序列化格式支持语言文档和社区支持gRPCGoogleProtocolBuffers多种语言,......
  • Python多进程用法
    Python的多进程用法主要是通过`multiprocessing`模块实现的。以下是一个简单的示例: 1.首先,导入`multiprocessing`模块。2.定义一个要在多个进程中运行的函数。3.使用`multiprocessing.Process`类创建多个进程对象。4.调用进程对象的`start()`方法启动进程。5.使用`joi......
  • python sqlalchemy 框架
     1. SQLAlchemy简介SQLAlchemy是一个PythonSQL工具包和对象关系映射器,它为应用程序开发人员提供了SQL的全部功能和灵活性。它提供了一整套广为人知的企业级持久性模式,旨在实现高效和高性能的数据库访问,并将其转化为简单且Pythonic的领域语言。以下是SQLAlchemy的一些主要特......
  • python中将DNA链转换为RNA链
     001、利用循环结构[root@PC1test01]#lsa.fatest.py[root@PC1test01]#cata.fa##测试DNA序列GATGGAACTTGACTACGTAAATT[root@PC1test01]#cattest.py##转换程序#!/usr/bin/envpython#-*-coding:utf-8-*-in_file=open("a.fa","r"......
  • Python分享之redis(2)
    Hash操作redis中的Hash在内存中类似于一个name对应一个dic来存储hset(name,key,value)#name对应的hash中设置一个键值对(不存在,则创建,否则,修改)r.hset("dic_name","a1","aa")hget(name,key)r.hset("dic_name","a1","aa")#在name对应的hash中根据key获取val......
  • [Python] PyCharm(Python IDE)安装教程
    1简介PyCharm是目前最流行、使用最广泛的PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。比如调试、语法高亮、项目管理、代码跳转、智能提示、单元测试、版本控制等。此外,还提供了一些高级功能,以......
  • Python 实现 定义个矩形类,有长和宽两个实例属性,还有一个计算面积的方法
    思路:'''1.定义矩形类2.定义属性属性分:类属性和实例属性实例属性==》self.属性===》self是一个参数在一个方法中==》_init_方法3.定义方法defArea(self):s=self.length*self.width'''classSquare:def__init__(self,length,width):#实例属性sel......
  • python如何提取浏览器中保存的网站登录用户名密码
    python如何提取Chrome中的保存的网站登录用户名密码?很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名、密码,非常方便。作为python脚本,能否拿到用户提前保存在浏览器中的用户名密码,用以自动登录呢?必须有,小爬已经提前踩过很多坑,找到了可行的......