Python3的反射

class A():
    def __init__(self, name, age):
        self.name = name
        self.age = age


obj = A('joe', 18)
obj.name

# @ 获取 name的值
b = 'name'

print("dict", obj.__dict__)
print("dict[name]", obj.__dict__['name'])

# 获取属性 获取name的值
print("获取属性值 getattr", getattr(obj, 'name'))

# 判断是否存在
print("判断是否存在 hasattr", hasattr(obj, 'name'))

# 设置属性值
print("dict", obj.__dict__)
setattr(obj, 'k1', 'v1')  # 添加
print("dict", obj.__dict__)

# 删除

delattr(obj, 'k1')  # 删除
print("dict", obj.__dict__)

# 属性获取 在模块中的使用
import s2

print("获取s2的", getattr(s2, 'name'))  # 获取属性值
f = getattr(s2, 'func')  # 获取函数
print("获取s2的函数执行", f())  # 打印函数执行结果

cls = getattr(s2, 'Q')
print(cls)
obj = cls('')
print(obj)
obj.name

inp = input('please input')
if hasattr(s2, inp):
    func = getattr(s2, inp)
    re = func()
    print(re)
else:
    print('404 不存在该模块')

s2.py文件如下:

name = 'smith'
def func():
    return 'func'
class Q():
    def __init__(self, name):
        self.name = name
def f1():
    return ' 1'
def f2():
    return ' 2'
def f3():
    return ' 3'
def f4():
    return ' 4'

小结:

  • .__dict__获取对象字典
  • __dict__['name'] 获取key为name的属性值
  • getattr(obj,'name') 直接从对象obj中获取key为name的属性值
  • hasattr(obj,'name') 判断对象obj中是否包括key为name的属性值
  • setattr(obj,'key','value') 设置对象obj中的key设置为value 如果没有该key直接添加该key并值设置为value
  • delattr(obj,'key') 删除对象obj中的key 为'key'的键值对
  • 以上同样适用于不同文件之间
  • f=getattr(s2,'func') 获取s2文件中的函数 print(f()) 在可以直接获取函数执行结果 注意:f 获取的是函数 f() 可以直接执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值