转自https://www.cnblogs.com/renjie1105/p/15909285.html

python反射简介

在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射。

hasattr

判断对象中是否有这个方法或变量

class Person:
def __init__(self, name):
self.name = name def talk(self):
print(f'{self.name}正在交谈') p = Person('alice')
print(hasattr(p, 'talk'))
print(hasattr(p, 'name'))
print(hasattr(p, 'abc'))

输出:

True
True
False

getattr

获取对象中的方法或变量的内存地址

class Person:
def __init__(self, name):
self.name = name def talk(self):
print(f'{self.name}正在交谈') p = Person('alice')
n = getattr(p, 'name') # 获取name变量的内存地址
print(n)
f = getattr(p, 'talk') # 获取talk方法的内存地址
f()
s = getattr(p, 'abc', 'not find') # 打印结果:not find。
# 因为abc在对象p中找不到,本应该报错,
# 属性找不到,但因为修改了找不到就输出not find
print(s)

setattr

为对象添加变量或方法

def abc(self):
print(f'{self.name}正在交谈') class Person:
def __init__(self, name):
self.name = name p = Person('alice')
setattr(p, 'talk', abc) # 将abc函数添加到对象p中,并命名为talk
p.talk(p) # 调用talk方法,因为这是额外添加的方法,需手动传入对象
setattr(p, 'age', 30) # 添加一个变量age,初始值为30
print(p.age)

delattr

删除对象中的变量,但是不能删除方法

python中的反射机制的更多相关文章

  1. Python Python中的反射机制

    Python中的反射机制 by:授客 QQ:1033553122 概念 借用java中的定义:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方 ...

  2. python中的反射

    在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ...

  3. Python 中的反射和自省

    本文主要介绍Python中的反射和自省,以及该机制的简单应用 熟悉Java的程序员,一定经常和Class.forName打交道.即使不是经常亲自调用这个方法,但是在很多框架中(spring,eclip ...

  4. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  5. Python 异常处理与反射机制

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  7. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  8. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  9. .Net 中的反射机制

    .Net 中的反射机制 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标 ...

  10. oc中的反射机制

    好久没有总结过了,一直在赶项目... 今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵. 反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及 ...

随机推荐

  1. 尝试在Ubuntu中安装Emacs遇到的问题

    出现具体问题 今日学习安装emacs在Ubuntu19.04当中 安装详见下方帖子: 链接: 如何在Ubuntu中安装Emacs. 安装遇到问题,即 sudo add-apt-repository p ...

  2. mac大航海时代4

    mac大航海时代4.dmg 下载安装即可 https://590m.com/f/28636472-500476378-c957e8 (访问密码:7410)

  3. Java基础——for循环、while循环

    package com.zhao.demo; public class Demo04 { //for循环 /*public static void main(String[] args) { for ...

  4. 一文学会使用pip

    pip介绍 pip的全称:package installer for python,是 Python包管理工具,该工具提供了对Python包的查找.下载.安装.卸载的功能.Python官方的PyPi仓 ...

  5. vue验证码倒计时60s

    vue3验证码倒计时60s //倒计时60s const timeNum = ref(60); const countDown = ref(); const isShowSend = ref(true ...

  6. Storm日志预警以及汇总解决方案

    目前在storm代码层面,捕获到的异常无法第一时间告知到开发人员,只有到最后引起显而易见的状况才会再去反查work所在服务器的日志进行问题分析,这样对后续优化代码和异常处理很不利. 但是也可以通过以下 ...

  7. linux虚拟机,ifconfig无法获取静态ip地址

    之前一直显示这种ip地址,如下图(网图),查看了DHCP,是正常启动的,虚拟网络编辑器中设置的也正确.后来发现更改虚拟机的设置后就可以了,如下: 设置方法:VMware-虚拟机-设置-网络适配器,选择 ...

  8. test image size

    676KB - jpg 2.5M jpg 3.8M-jpg 4M

  9. Vue2路由跳转传参,获取路由参数,Vue监听路由

    1 this.$router.push({ 2 // name:路由组件名 3 name: routeName, 4 query: { 5 mapId:this.mapId 6 } 7 }) 8 9 ...

  10. core程序实现文件下载

    已知本地文件名,返回给前台流 string filepath = path +"/" + filename +".txt"; if(System.IO.File ...