python反射+字符串调用模块

本文介绍了Python中的反射概念,包括自省的能力和四个相关函数。通过hasattr检测对象是否存在特定方法或属性,使用setattr动态添加属性,以及如何使用del删除属性。示例展示了如何通过字符串调用模块内的函数,适用于参数为字符串的情况。

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

什么是反射

反射主要是指程序可以访问、检测和修改它本身状态活性位的一种能力(自省)
四个可以实现自省的函数
hasattr(对象,字符串)–》检测对象的字符串存在不存在
getattr(对象,字符串,如果找不到给返回这个值)–》获取字符串的值,不存在报错
setattr(obj,key,value)–》字符串的key = value
delatt(obj,字符串)–》删除obj.字符串

·===============================·
hasattr用来检测object中有没有一个name字符串对应的方法或属性

class Heizhongjie:
    feturn ='Ugly'
    def __init__(self,name,addr):
        self.name = name
        self.addr = addr
    def sell_hourse(self):
        print('%s正在卖房子'%self.name)
    def rent_hourse(self):
        print('%s租房子'%self.name)
b1 = Heizhongjie('伊博乐地产','孙河')
print(hasattr(b1,'name'))
print(hasattr(b1,'sell_hourse'))

hasattr查的是b1.能不能调用得到namesell_hourse这两个属性,能就返回True

print(getattr(b1,'name'))
print(getattr(b1,'rent_hourse'))

如果没有,就会报错
getattr(b1,'rent_hourse')
因为他返回的是一个地址,把他赋值,然后加括号运行就可以运行该函数了

setattr(b1,'sb',123)
setattr(b1,'name','韩文文地产')
print(b1.__dict__)

setattr相当于增加
delattr(b1.'sb')
把b1中的sb删掉,相当于del b1.sb

=========================================

在编码时如果接收到的模块是一个字符串形式的模块,那么这个时候就可以使用importlib这个模块方法,例如,我在m1下创建了一个叫test的python文件,文件中写有两个函数,之后要用importlib的方法使用test的函数:
m1下test的内容:

def test():
    print('test1')
    
def _test2():
    print('test2')

调用模块的内容:

import importlib
m = importlib.import_module('m2.test')
print(m)
m.test()
m._test2()

这个方法和from m2 import test类似,但是适用于接收的参数为字符串时的调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值