python反射
2022/6/14 1:22:38
本文主要是介绍python反射,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
反射
概念与作用
反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员。
可使用反射的地方:
- 反射类中的变量 : 静态属性,类方法,静态方法
- 反射对象中的变量、对象属性、普通方法
- 反射模块中的变量
- 反射本文件中的变量
getattr
判断类、对象或者模块中是否有相应的属性或方法。
用法:getattr(obj, str, default=None) 判断obj中是否有str或方法属性,有就返回,没有时若有传入第三参数就返回第三参数,没有就报错。
class A: name = 'zs' age = 18 print(getattr(A,'name')) print(getattr(A,'language','notfound'))
zs notfound
setattr
设置属性,第三参数为新的属性值。
class A: name = 'zs' age = 18 setattr(A,'name','ls') setattr(A,'language','Chinese') print(getattr(A,'name')) print(getattr(A,'language','notfound'))
ls Chinese
hasattr
判断是否有某个属性,有就返回True,没有就返回False
class A: name = 'zs' age = 18 if hasattr(A,'name'): print(getattr(A,'name'))
zs
delattr
删除某个属性
class A: name = 'zs' age = 18 delattr(A,'name') print(hasattr(A,'name'))
False
sys.modules[__name__]
sys.modules[__name__]
就是本文件对象。
import sys class A: def __repr__(self): return '666' if hasattr(sys.modules[__name__],'A'): print(getattr(sys.modules[__name__],'A')())
666
- 补充:
__repr__()
方法是类的实例化对象用来做“自我介绍”的方法,默认情况下,它会返回当前对象的“类名+object at+内存地址”,而如果对该方法进行重写,可以为其制作自定义的自我描述信息。
默认情况:
class CLanguage: pass clangs = CLanguage() print(clangs) # 执行 print(clangs) 等同于执行 print(clangs.__repr__()),程序的输出结果是一样的(输出的内存地址可能不同)
# 运行结果 <__main__.CLanguage object at 0x000001A7275221D0>
对该方法进行重写:
class CLanguage: def __init__(self): self.name = "EtAl0rs" def __repr__(self): return "哈哈哈" clangs = CLanguage() print(clangs)
# 运行结果 哈哈哈
这篇关于python反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python