python——metaclass

《Python进阶系列》十五:详解Python中的元类(metaclass) metaclass是 Python 的黑魔法之一,这是值得学习的。 阅读详情

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


SPME/IP PPT详解 什么是中间件?它是操作系统与应用程序之间的一块代码,它对于应用程序提供了一些标准接口,屏蔽了应用程序与底层的一些交互,上层应用程序只要和中间件进行交互就可以了,这样就可以达到一个解耦的目的。SOMEIP其实是一个中间件,它是操作系统与应用程序之间的一段代码,它是可以运行在TCP/IP之上的,可以在很多平台上使用,可以适配较多的操作系统,可以提供很多接口。经过序列化之后,在网络上传输的是一些101010这样的二进制流。SOME/IP可以承接应用层的一些数据,进行打包放到传输层。 阅读详情

相关推荐

从Cartographer3D到LIO-SAM:主流3D激光SLAM算法怎么选?一份给机器人工程师的实战避坑指南

本文深入探讨了从Cartographer3D到LIO-SAM等主流3D激光SLAM算法的选型策略,为机器人工程师提供实战避坑指南。通过对比不同算法在传感器配置、环境特性和计算资源等方面的表现,帮助开发者根据项目需求选择最优方案,并分享传感器标定、资源优化等实用技巧。

weixin_27310985的博客 154

python中的metaclass

metaclass 传说metaclass在python中是个“逆天”的存在,有人认为它是“阿拉丁神灯”,无所不能;有人认为它是“潘多拉魔盒”,会蛊惑程序员去滥用,释放“恶魔”,然后悲剧就产生了。就连硅谷一线大厂要想使用metaclass都得需要特批。深入理解它的python开发人员占比不到0.1%。 它会带来好处也容易带来灾难,只有深入了解它,才能使用好它。看了一些资料,结合自己的测试,把它...

jiguanglong的博客 1万+

从SIGGRAPH审稿人视角看:什么样的TOG论文更容易被接收?

本文从SIGGRAPH审稿人视角深入解析TOG论文的审稿标准与投稿策略,揭示如何提升论文接收概率。重点探讨创新性、技术深度、实验验证等核心评分维度,并提供写作技巧与审稿意见应对策略,帮助研究者优化ACM Transactions on Graphics投稿质量。

weixin_33721344的博客 108

深入浅出讲解 Python 元类(Metaclass)的使用

本文讨论 meta class(元类)的定义,以及使用方式。 主要内容 - type与object的区别 - 用 type 定义类 - 如何编写 Metaclass - Metaclass 的实际应用: 用 metaclass实现单例模式 singleton

Python技术探索 2860

谷歌DreamFusion使用方法及实例详解

DreamFusion 是谷歌提出的基于文本生成3D模型的突破性技术,无需3D训练数据,通过2D扩散模型(如Imagen)与NeRF(神经辐射场)结合实现。以下为使用社区开源实现(如。)的详细步骤及实例。

主攻大数据 人工智能 物联网 安全 低空经济等方向。mtsc 、gtest特邀分享嘉宾 1043

Vue项目实战:用DataV的dv-scroll-board打造高颜值滚动表格(附完整代码)

本文详细介绍了如何在Vue项目中使用DataV的dv-scroll-board组件打造高颜值滚动表格。从基础集成到高级配置,包括动态数据处理、深度样式定制、性能优化策略以及交互增强方案,帮助开发者快速实现企业级数据展示需求。特别针对样式优化和滚动表格的常见问题提供了实用解决方案。

weixin_30892037的博客 499

Python 的 metaclass

metaclass 的作用是:对新创建的类 new_class 实现一些定制 customization 功能。

drin201312的博客 2017

华科软院研究生第一学期的事项(奖学金、学业、考试等)

奖助 研究生补助 每月500,全年共6000元 每个月月底学院会打到银行卡里 碰上开学、过年会延后发放 17年10月底发了9、10两个月的钱 18年3月底发了2、3月的钱 学业奖学金 17届全日制每人都有 按照考研最后综合成绩排名 前16 10000 前80 8000 其他 4000 大概11月底发 注意:第一年如果有挂科的话,第二年就不能参加学业奖学金评...

sjdeak的博客 3706

神奇的 Python 元类 (metaclass) 及其应用

Python 中的元类(metaclass)是一种特殊的类,它负责创建和定义其他类。Python 元类的用途包括:控制类创建过程、动态创建类、实现设计模式、代码检查和验证、自动注入代码等。本文使用图片和示例详细演示了 Python 元类的神奇功能,希望您能在这篇文章中找到有价值的知识和灵感。

ReadingHere的博客 1119

Claude Code 任务编排 头脑风暴与 疯狂拷问:Superpowers vs Grill-me 硬核对比与工程落地

Superpowers和Grill-me是AI编程中的互补工具:Superpowers提供工程化开发流程(从需求梳理到代码审查),确保规范执行;Grill-me通过持续追问帮助厘清需求,避免方向偏差。两者结合形成"构思-拷问-执行"工作流,前者负责方案生成与落地,后者专注需求审查。根据场景选择:个人项目可用Grill-me快速澄清需求,企业项目推荐Superpowers全流程,复杂开发则建议组合使用。它们分别解决"如何落地"和"是否对齐"的问题,共

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 327

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备

看到这篇文章的你,相信对知识图谱相关概念不在陌生。知识图谱相关内容在实际开发中包含两个部分:1.知识图谱构建,2.知识图谱使用。知识图谱构建过程中涉及内容、技术都比较多。知识图谱的应用也逐渐在我们的生活中随处可见,其中基于知识图谱的问答系统就是其中的一个应用。基于知识图谱的问答系统称做KGQA(knowledge graph question answer),也有人称其为KBQA(knowledge based question answ).基于知识图谱的问答系统通常是使用的是领域知识图谱。下面就结合Git

让算法融入生活,改变生活! 4719

Python元类(metaclass)

在 Python 中,一切皆对象,包括类本身。类定义了对象的行为,而元类则定义了类的行为。简而言之,元类就是创建类的“类”。符合Python对象的条件能够直接赋值给一个变量可以添加到集合对象中能作为函数参数进行传递可以作为函数返回值从这里,大家就可以看出,Python中一切皆为对象,一切都符合这些条件Python对象都会有三个特征身份,即是存储地址,可以通过id()方法查询类型,即对象所属的类型,可以用type()方法来查询值,都会有各自的数据passj = Job()

1178

选型不再靠感觉:一文看懂 SAP Event Mesh 与 SAP Integration Suite, advanced event mesh 的能力边界

本文对比分析了SAP Event Mesh与SAP Integration Suite, advanced event mesh的差异。SAP Event Mesh适合轻量级场景,主要用于SAP系统间异步通信,支持AMQP、MQTT等协议,消息大小限制为1MB。而advanced event mesh面向企业级事件网络,提供跨云/本地部署、事件治理、监控等高级功能,支持30MB消息和更大存储容量。选择时需考虑业务规模、实时性要求、治理需求等因素:单一SAP生态内扩展可选Event Mesh;跨区域、多云环境

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 135

改变python对象的黑魔法metaclass

大家好,我是小小明。 今天我分享的主题是:改变类定义的神器-metaclass 看到标题,你可能会想改变类的定义有什么用呢?什么时候才需要使用metaclass呢? 今天我将带大家设计一个简单的orm框架,并简单剖析一下YAML这个序列化工具的原理。 文章目录Python类的上帝-typemetaclass到底是什么简易ORM框架的设计YAML序列化工具的实现原理浅析总结 Python类的上帝-type 说到metaclass,我们首先必须清楚一个最基础的概念就是对象是类的实例,而类是type的实例,重复一

小小明-代码实体的专栏 3万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python metaclass_理解python的metaclass(元类)

前言这篇博客是我在stack overflow上看了一个提问回复后写的,例子基本用的都是e-satis本人的例子,语言组织也基本按照翻译来。但我并不是一个翻译者,并不会严格遵守每行每句的翻译;有时候我会将表述换个顺序,省略一些我认为无关紧要的话,以便读者更好理解。所以,如果你不喜欢我的语言表述,或者想要看英文原文,可以点击此链接去查看原回复。类也是对象在理解metaclass之前,我们先要掌握py...

weixin_39674978的博客 284

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python中的metaclass

Python 中有很多黑魔法,比如今天我将分享的 metaclass。我认识许多人,对于这些语言特性有两种极端的观点。 一种人觉得这些语言特性太牛逼了,简直是无所不能的阿拉丁神灯,必须找机会用上才能显示自己的 Python 实力。 另一种观点则是认为这些语言特性太危险了,会蛊惑人心去滥用,一旦打开就会释放“恶魔”,让整个代码库变得难以维护。 市面上的很多中文书,都把 metaclass 译为“元类”。我一直认为这个翻译很糟糕,所以也不想在这里称 metaclass 为元类。因为如果仅从字面理解,“元”是

scu-liu的博客 1604

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python metaclass_[译]理解python的metaclass

前言这篇博客是我在stackoverflow上看了一个提问回复后写的,例子基本用的都是e-satis本人的例子,语言组织也基本按照翻译来。但我并不是一个翻译者,并不会严格遵守每行每句的翻译;有时候我会将表述换个顺序,省略一些我认为无关紧要的话,以便读者更好理解。所以,如果你不喜欢我的语言表述,或者想要看英文原文,可以去查看原回复。类也是对象在理解metaclass之前,我们先要掌握python中的...

weixin_39555320的博客 92

Python进阶:metaclass谈

metaclass 的超越变形特性有什么用?   来看yaml的实例: import yaml class Monster(yaml.YAMLObject): yaml_tag = u'!Monster' def __init__(self, name, hp, ac, attacks): self.name = name self.hp = hp ...

weixin_30907523的博客 330

classpython_python 的 metaclass

Python 是一种非常灵活的语言,这使得它具有很强的表达力,metaclass 也是这种强大表达力的一个体现。啥是 metaclass 呢? meta- 这个词似乎这些年越来越流行,翻译成中文,一般是 元..., 比如元认知,元数据。“元什么” 一般表示的含义是 什么的什么, 元数据即数据的数据,元认知即认知的认知。metaclass 就是类的类。粗略的说,执行一个 metaclass 会得到...

weixin_32323283的博客 118

python metaclass_python中的metaclass

首先看下面的代码:# coding: utf-8class Test(object):passprint Test.__class__ # typeprint Test.__base__ # objectt = Test()print t.__class__ # Testprint t.__class__.__class__ # typeprint Test.__class__._...

weixin_39831567的博客 64

python meta_Python中的metaclass

Class也是Object在理解metaclass之前,我们需要先理解Python中的class。从某种程度上来说,Python中的class的定位比较特殊。对于大部分面向对象语言来说,class是一段定义了如何产生object的代码块。在Python中这一定义也成立:但是在Python中,class并不只有这一角色。class实际上也是object。当我们使用class定义一个类的时候,Pyth...

weixin_42139042的博客 723

python当中的metaclass使用

python当中的metaclass 简单介绍 python中对象也是类,类作为一种特别的对象存在,特别之处就在于可以作为一个模板来生成对象(所有的类都是),暂且把python中的类称为类对象,类对象使用class定义。 除了class定义, 我们也可以用type来创建一个类。 type(class_name, base_class, attrs) # example NewClass = ...

失业矿工的博客 2155

python metaclass_Python metaclass 元类

__ new____new__在__init__之前被调用,他创建对象实例后把实例对象self传递个 __init__。class A():def __new__(self):print('__new__')def __init__(self):print('__init__')>>> A()'__new__' # __init__ 没有被执行到# 默认下的 __new__cla...

weixin_39686353的博客 149

python 学习笔记 metaclass详解

python 元类 metaclass: metaclass 控制类的行为。当我们创建类的时候我们就可以通过这个类来创建对象实例,当然同样的,如果我们想要创建类,那么就必须根据这个metaclass来创建类,也就是说,我们需要先定义metaclass才能过创建类。 1:Python中类本省就是对象,类之所以为类,就是因为类这个对象本身拥有创建对象的能力。 于是我们可以对类进行1:将它赋值给一

u011998917的专栏 2392

理解python metaclass

关于metaclass的解释,有句“名言“广为流传: [Metaclasses] are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don’t (the people who actually need them know with certainty that they need them, and don’t need an explanation a

harry的博客 650

metaclass python_python中Metaclass的理解

今天在学习《python3爬虫开发实战》中看到这样一段代码31 classProxyMetaclass(type):2 def __new__(cls, name, bases, attrs):3 count =04 attrs['__CrawlFunc__'] =[]5 for k, v inattrs.items():6 ...

weixin_31677427的博客 336
上一篇: python----yield
下一篇: openstack nova 基础知识——policy
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值