当前位置:首页 > 数码 > 内省与反射的奇妙运用-Python程序员的秘密武器 (内部反射)

内省与反射的奇妙运用-Python程序员的秘密武器 (内部反射)

admin7个月前 (05-14)数码52

/target=_blankclass=infotextkey>Python是一门极富灵敏性的编程言语,其内省和反射机制是其共同之处之一。

内省是指程序在运转时审核查象的才干,而反射是指程序在运转时修正对象的才干。

本文将率领大家一同窗习Python中的内省和反射机制,以及它们在实践运行中的关键性。

什么是内省?

内省是指程序在运转时了解对象的类型、属性和方法的才干。

Python提供了许多内省工具,使开发人员能够深化了解他们的代码和数据。

以下是一些经常出现的内省工具和技术:

type()函数

type()函数用于失掉对象的类型。它通知你一个对象是一个整数、字符串、列表还是其余类型。关于审核查象的类型十分有用。

x=5print(type(x))#输入<class'int'>

dir()函数

dir()函数用于失掉对象的属性和方法列表。它可以帮你了解对象的可用性能。在探求模块或类时十分有用。

importmathprint(dir(math))#输入math模块的属性和方法列表

hasattr()、getattr()和setattr()函数

这些函数用于审核、失掉和设置对象的属性。它们能够在运转时操作对象的属性。

classPerson:name="Alice"person=Person()print(hasattr(person,"name"))#审核查象能否有名为"name"的属性print(getattr(person,"name"))#失掉对象的"name"属性的值setattr(person,"name","Bob")#设置对象的"name"属性的值
内部反射

inspect模块

inspect模块提供了更弱小的内省工具,可以审核模块、类和函数的外部结构,以及失掉源代码。

importinspectdefexample_function():passprint(inspect.getsource(example_function))#失掉函数的源代码

什么是反射?

反射是指程序在运转时修正对象的才干。

Python的反射机制准许您灵活创立类、调用方法、失掉和设置属性,以及修正对象的行为。

以下是一些经常出现的反射技巧:

灵活创立类和实例

Python可以在运转时灵活创立类和类的实例。关于构建插件系统、灵活加载模块或成功工厂形式十分有用。

classMyClass:passMyDynamicClass=type("MyDynamicClass",(),{})#灵活创立类my_instance=MyDynamicClass()#创立类的实例

灵活调用方法

Python在运转时灵活调用对象的方法。关于成功插件架构、智能化测试或构建灵敏的代码十分有用。

classMyCalculator:defadd(self,x,y):returnx+ycalculator=MyCalculator()method_name="add"result=getattr(calculator,method_name)(2,3)#灵活调用方法

灵活失掉和设置属性

Python在运转时灵活失掉和设置对象的属性。关于性能文件处置、元编程或ORM(对象相关映射)十分有用。

classPerson:name="Alice"person=Person()attribute_name="name"value=getattr(person,attribute_name)#失掉属性值setattr(person,attribute_name,"Bob")#设置属性值

内省与反射的运行场景

内省和反射机制在许多运行中施展着关键作用。以下是一些运行场景:

插件系统

内省和反射可用于成功插件系统,准许运行程序在运转时加载和调用插件。这使得运行程序愈加灵敏,能够灵活裁减性能。

灵活代码生成

内省和反射可用于灵活生成代码,这在元编程和代码生成义务中十分有用。例如,您可以经常使用内省和反射创立自定义类、函数或表白式。

智能化测试

在智能化测试中,内省和反射可以协助测试框架灵活地创立测试用例、调用测试方法和审核测试结果。这简化了测试代码的编写和保养。

数据库ORM

对象相关映射(ORM)框架经常使用内省和反射来将数据库表映射到Python对象,准许您在代码中操作数据库表,而无需间接编写SQL查问。

性能文件处置

内省和反射可用于灵活加载和解析性能文件。这准许运行程序在不修正代码的状况下更改性能。

示例代码

以下是一个示例代码,展示了内省和反射的一些经常出现用法:

classPerson:name="Alice"defdynamic_method():print("Dynamicmethod")#内省:失掉对象的类型和属性x=5print(type(x))#输入<class'int'>print(dir(x))#反射:灵活创立类、方法和调用方法MyDynamicClass=type("MyDynamicClass",(),{})my_instance=MyDynamicClass()setattr(my_instance,"dynamic_method",dynamic_method)my_instance.dynamic_method()#输入"Dynamicmethod"#运行场景:插件系统classPlugin:defperform_action(self):print("Pluginaction")plugin_name="Plugin"plugin_class=globals()[plugin_name]plugin_instance=plugin_class()plugin_instance.perform_action()#输入"Pluginaction"

总结

Python中的内省与反射机制为程序员提供了弱小的工具,使他们能够在运转时了解和修正对象的属性和行为。

内省可以协助咱们了解对象的结构,探求模块、类和函数的外部,失掉源代码,甚至灵活地审核和控制对象的属性和方法。反射则使咱们能够在运转时创立、调用和修正对象,这关于插件系统、灵活代码生成、智能化测试、ORM和性能文件处置等义务十分有用。

但是,内省与反射是弱小而灵敏的工具,须要审慎经常使用。滥用它们或者造成代码变得复杂难以保养。因此,程序员应该在适当的状况下充沛应用这些机制,确保代码的可读性和可保养性。


以往武器都是尽量减小在雷达上的反射面 为什么不制造一种无限扩大反射面的设备 使其能在雷达上大面积显示

其实电磁干扰装置就是这样的,对雷达进行干扰。 早先技术不太先进的时候是空中撒铝条的方式对雷达干扰,实际效果跟你想的差不多。 但是如果是进行秘密行动的话这样的方法就不那么奏效了。 比如美国击毙拉登行动,必须是不能让巴空军觉察到的秘密行动,干扰的话反而会起到使对方发生警觉,只能采用隐身潜入

巴尔坦星人是奥特曼里反派出镜一号么?

他可以被称为除奥特曼之外,最有名的宇宙人了...

初代巴尔坦星人
身高:微型~ 50米
重量: 15,000吨
初登场:初代奥特曼第二话(打击侵略者)
1966.07.24
原本是22.3亿微小的Baltans到达地球上修理他们的宇宙飞船。 但他们决定抛弃自己母星并侵入地球作为他们自己的新家,原因是他们的母星被地球的科学核试验歼灭。 它们是著名的宇宙忍者,身高可以伸缩自如;不但具备分身术、隐身能力,双钳还会发出白色破坏性光线&赤色凝结光线。 科特队尝试与他们进行谈判以说服他们到火星移民,可是完全无用。 显然,Baltans不想在火星上生活,因为他们对Specium这种化学物质有过敏性反应。 而火星被证实富含这种元素。 Specium也碰巧是初代奥特曼的主要激光武器,面对地球的空前危机,人类束手无策、地球防卫军节节败退。 幸好初代奥特曼击败了巴尔坦星人(用射线将载满微化巴尔坦星人的母船一击轰爆), 巴尔坦星人就此全军覆没。

第二代巴尔坦星人
身高:微型~ 50米
重量:15,000吨
初登场:初代奥特曼第16话(科特队向宇宙进发)
1966.10.30
残存在R行星的巴尔坦星人后代;胸前的反射镜能把奥特曼的攻击光线反射回去。 显而易见并不是所有的Baltan都在第2话中被歼灭。 本话共中有两个巨大的baltans出现,也出现了一群小的。 第二代巴尔坦星人被初代奥特曼的“八裂斩切光轮”攻击一分为二。

第三代巴尔坦星人
身高:微型~ 50米
重量:15,000吨
初登场:初代奥特曼第33话(被禁止的语言)
1967.2.26
以梅菲拉斯星人部下的身份登场。 在梅菲拉斯星人的命令下短暂的在东京的大楼中间出现,但很快又退场下去。 但他已经能够自夸是初代奥特曼中出场最多的宇宙人了

巴尔坦星人Jr
身高:微型~ 45米
重量:30,000吨
初登场:杰克奥特曼第41话(小巴尔坦星人的复仇)
1972.1.21
它可以称之为“第四代巴尔坦星人”。 因为父亲被初代奥特曼杀死,所以前来地球复仇;双钳能发射冷冻弹、飞弹。 不清楚以前中的哪个是他爸爸,这个Baltan有更小的爪。 它控制着机器人Builgamo,伪装为一大楼。 目的是诱骗MAT的所有成员,除掉他们。

卡通版巴尔坦星人
初登场:乔奥特曼第8话(ヒカリ队员の秘密が盗まれた!?)
1979.05.23
各地发电厂遭到神秘幽浮袭击、窃取电能,导致社会秩序大乱。 一名神秘男子(巴尔丹星人)偷偷拍摄乔伊尼亚斯奥特曼与怪兽的战斗场面,佯称要在电视台公开播放超人的秘密。 光超一郎(旧译:超意朗)主动前往追查,却被困入发电厂。 巴尔丹星人还驾驶神秘幽浮,将窃来的电能放射于电厂周遭,让光超一郎无法变身为奥特曼。 所幸科学警备队及早发现这间异样的发电厂,捣毁巴尔丹星人的陷阱。 乔伊尼亚斯顺利变身之後,巴尔丹星人的下场就不妙了。

第五代巴尔坦星人
身高:微型~ 45米
重量:30,000吨
初登场:爱迪奥特曼第37话(巴尔坦星人的动物园)
1980.12.17
化装成普通的地球人偷偷地进入UGM的总部实地考察。 计划在Baltan行星上建一个动物园并抓住爱迪回去展览(汗。 。 。 ) 自夸拥有最强的战力及智力,可与奥特曼分庭抗礼。 以巴尔坦火焰为武器。

第六代巴尔坦星人
身高:微型~ 45米
重量:30,000吨
初登场:爱迪奥特曼第45话(バルタン星人の限りなきチャレンジ魂)
1980.2.18
专门挑拨人类纷争、企图引起世界大战,打算趁机征服地球;双钳能发出强力光线。 面对爱迪的「八裂斩切光轮」,第六代巴尔坦星人被截为两段!

强力巴尔坦星人
初登场:帕瓦特奥特曼第01话(银色の追迹者)
1995.04.08
1995年重新诠释的巴尔坦星人(POWERD版)。 它曾破坏许多星球的文明,被帕瓦特一路追击而来到地球;由背部伸展翅膀,可以M27的速度飞行。 它最强的武器是「反重力波」,在帕瓦特vs强力巴尔坦星人的市街夜战中,帕瓦特遭受「反重力波」而节节倒退;画面动作虽缓慢,但「反重力波」的压迫力却同等传达观众身上,这段也刊称夜景中的经典

精神巴尔坦星人
初登场:帕瓦特奥特曼第13话(さらば!ウルトラマン)
1995.07.01
故事结局像是草草了结,大家以为(盼望)是强悍的“精神巴尔坦星人”,三两下子就被轻易解决,几乎没什麽重要份量的感觉。 据推测它是巴尔坦一族的统治者,头脑异常发达;能利用强大的精神波,控制部下及怪兽。

新巴尔坦星人
初登场:高斯剧场版1《THE FIRST CONTACT》
2001.07.20
自《帕瓦特奥特曼》之後,巴尔坦家族沉寂了好一段日子;现在,藉由的故事,21世纪新形象的「BALTAN」宣布复出了。 在高斯奥特曼剧场版《THE FIRST CONTACT》中,令人目光难拒的,莫过於那全身强化、战力剽悍的「新巴尔坦(new-BALTAN)」。 高斯奥特曼(月神型态)vs巴尔坦星人,双方於「废月」展开争斗。 巴尔坦星人双钳贯劲、插击「废月」地表,刹时,高斯奥特曼脚底浮现无数巨大利刃;高斯奥特曼急忙高速回转,将利刃悉数击碎。 宇宙忍者·巴尔坦星人」强化成「新巴尔坦(new-BALTAN)」。 右钳可以幻化出长长的剑刃。 左钳幻化出破坏力十足的光线铳;双钳可以幻化为弯曲双勾。 肩甲幻化出无数锐钉、全数激射而出,高斯奥特曼呈浑圆高速回转,全身防得滴水不漏。 无数激射袭来的光刃,高斯奥特曼奋力抵御。 「新巴尔坦」左钳的光鞭束缚著高斯奥特曼。 历代奥特曼中,大概只有帝纳(超能型态)具有类似巴尔坦星人的「分身」技能。 面对「新巴尔坦」的「分身」老把戏,高斯奥特曼也具备相当战技,一场「分身术的高速之战」于是展开。 面对战斗挫败以及无法顺利寻得新家园的强大失望,新巴尔坦不禁潸然泪下,以自爆了结了自己。

黑暗巴尔坦
微型 ~ 51 米(超巨大化时357米)0.1克 ~ 3万9千吨(超巨大化时27万3千吨)

初登场:MAX第33集(2006年2月11日播放)
第34集(2月18日播放)

妄图侵略地球的好战的巴尔坦星人。 从手中发出热光线和重力波,还能超巨大化。 唯一一位与奥特曼正面交战胜利的强者,击败MAX的战绩终于可以为巴尔坦一族正名了。














免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Python

“内省与反射的奇妙运用-Python程序员的秘密武器 (内部反射)” 的相关文章

Python中的LEGB规则 (python怎样打开)

Python中的LEGB规则 (python怎样打开)

Python 中的 LEGB 规则决定了变量和函数的作用域解析顺序。它代表了四个作用域层级: 局部作用域 闭包函数外的函数 全局作用域 内置作用域...

b-b-个入门建议!-Python-技术书籍推荐-附赠-11 (b+b+b等于什么)

b-b-个入门建议!-Python-技术书籍推荐-附赠-11 (b+b+b等于什么)

近年来,Python 持续火爆,越来越多的人开始入门学习 Python。RealPython 作为最受好评的 Python 学习网站,拥有超百万的浏览量,以下是 RealPython 的开发者给...

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

/target=_blankclass=infotextkey>Python文件的读写操作时,有很多须要思考的细节,这包含文件关上形式、读取和写入数据的方法、意外处置等。 在本文中,...

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

Lambda 表达式 在 Python 中,Lambda 表达式是一个匿名函数,它可以在需要函数对象的地方使用。Lambda 表达式的语法如下: lambda arguments: exp...

轻松把握多线程和多进程-Python编程进阶 (多线是什么意思)

轻松把握多线程和多进程-Python编程进阶 (多线是什么意思)

1、简介 咱们将讨论如何应用/target=_blankclass=infotextkey>Python口头多线程和多进程义务。它们提供了在单个进程或多个进程之间口头并发操作的方法。并...

生成-UUID-操作-Python-齐全指南-格局和经常出现疑问 (生成uuid java)

生成-UUID-操作-Python-齐全指南-格局和经常出现疑问 (生成uuid java)

UUID(UniversallyUniqueIdentifier,通用惟一标识符)是一种全局惟一标识符生成形式,用于创立举世无双的标识符。/target=_blankclass=infotextk...

使用Python进行数据分析的步骤 (使用pycharm)

使用Python进行数据分析的步骤 (使用pycharm)

简介 Python 是一种动态的、面向对象的脚本语言,以其简单性和易读性而闻名。它广泛用于数据分析,因为它具有强大的库,兼容开源大数据平台 Hadoop,并且拥有众多优势,使其成为流行的编...

五分钟内完成个性化-GUI-计算器搭建-Python (五分钟内完成的动物实验)

五分钟内完成个性化-GUI-计算器搭建-Python (五分钟内完成的动物实验)

这个简单的教程将指导你如何在 Python 中使用 Tkinter 轻松制作一个全功能的 GUI 计算器。 7 8...