python--反射的使用--getattr,hasattr【,setattr,delattr】

本文介绍了Python反射的使用,它能让调用更简单。主要内容包括获取类中的属性和方法、调用导入模块的属性和方法,以及反射自己模块的属性和方法。还提到了hasattr用于判断,其参数需与getattr一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反射的使用使调用更加简单

# 反射.py
class A:
	def __init__(self, name, age, gender):
		self.name = name
		self.age = age
		self.gender = gender
	def work(self):
		return self.name+'的工作是吃饭'
a = A('张三', 12, '男')

加入现在有一个类如上,并实例化了
现在需要调用a的姓名的话,通常的做法就是

a.name

使用反射

getattr(a, 'name')

看着好像更麻烦了,但是并不是那么简单的
比如我输入name,给我返回name的值,输入age,返回age的值。。。。

ret = input('>>> ')
print(getattr(a, ret))

结果如下:
在这里插入图片描述
一、获取类中的属性和方法

# 属性
getattr(a, 'name')  # 张三
# 方法
ret = getattr(a, 'work')  # <bound method A.work of <__main__.A object at 0x02E7E670>>
ret()  # 调用   ---> 张三的工作是吃饭

二、调用导入模块的属性和方法
假如有一个mygetattrtext.py文件

day = 2018

class Person:
	name = '李四'
	age = 30
	gender = '男'

	def work(self):
		return '看电视'
# 反射.py
from mygetattrtest import Person, day  # 导入模块

p = Person()  # 实例化对象

# 属性
getattr(p, 'name')  # 李四
# 方法
ret = getattr(p, 'work')
ret()  # 看电视

# ----------------
# 反射导入模块的day属性
import sys
from mygetattrtest import day
getattr(sys.modules[__name__], 'day')

三、反射自己的模块的属性和方法

# 反射.py
year = 2019

def eat():
	return '我正在吃饭'

import sys

# 反射自己模块的属性
getattr(sys.modules[__name__], 'year')  # 2019

# 反射自己模块的方法(函数)
ret = getattr(sys.modules[__name__], 'eat')
ret()  # 我正在吃饭

hasattr
判断有没有呗

class A:
	def __init__(self, name, age, gender):
		self.name = name
		self.age = age
		self.gender = gender
	def work(self):
		return self.name+'的工作是吃饭'

# print(A.name)  # 一般的写法

a = A('张三', 12, '男')

# --------------------------------hasattr

if hasattr(a, 'name'):
	print(getattr(a, 'name'))  # 张三
else:
	print('找不到')

注意:hasattr中的参数和getattr中的参数是一致的,否则判断不就没用了吗

setattr和selattr不说了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒不可闫M先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值