python反射详解

反射
#hasattr(obj,name_str)判断一个对象obj里是否有对应的name_str字符串的方法
#getattr(obj,name_str)根据字符串去获取obj对象里的对应的方法的内存地址
#setattr(object, name, value) setattr(x,“foobar”,123)相当于x.foobar = 123。
#delattr(object, name)  该函数删除该obj的一个由string指定的属性。delattr(x, 'foobar')=del x.foobar
class  test(object):
    def __init__(self,name):
        self.name=name
    def test1(self,fruit):
        print("%s吃%s水果"%(self.name,fruit))
T=test('王荔')

#存在此方法
if hasattr(T,'test1'):#检查成员
    func=getattr(T,'test1')#获取方法地址
    func('西瓜')
else:
    setattr(T,'name','王力')  #设置成员
    print(T.name)
    
#不存在此方法,设置变量或修改变量
if hasattr(T,'test10'):#检查成员
    func=getattr(T,'name')#获取变量
    print(func)

else:
    setattr(T,'age',30)  #设置变量
    setattr(T, 'name','王力') #修改变量
    print(T.name,T.age)
    
#通过setattr方法把test3函数动态装配到T这个实例里,方法名是"test2"
def test3(self):
    print('类外的方法绑定到类内')
setattr(T,'test2',test3)
func=getattr(T,'test2')
func(T)


#删除变量、删除方法
delattr(T,'name')
#delattr(T,'test1')
#print(T.name)
#print(T.test1())

C:\Users\wangli\PycharmProjects\AutoMation\venv\Scripts\python.exe C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
王荔吃西瓜水果
王力 30
类外的方法绑定到类内

Process finished with exit code 0

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中,反射是指通过字符串的形式去访问对象的属性、方法和其他成员。Python中的每个对象都有一组内置的特殊属性和方法,比如 `__dict__`、`__class__`、`__name__`、`__bases__` 等等。这些属性和方法可以通过反射机制来访问和操作。 Python中的反射通常涉及到以下三个内置函数: 1. `hasattr(object, attribute)`:检查对象是否具有指定的属性或方法。 2. `getattr(object, attribute[, default])`:获取对象的属性或方法。如果属性或方法不存在,则返回默认值(如果指定了)或引发 AttributeError 异常。 3. `setattr(object, attribute, value)`:设置对象的属性或方法。 下面是一些示例: ```python class MyClass: def __init__(self): self.x = 10 def my_method(self): print("Hello, World!") # 创建一个对象 obj = MyClass() # 使用 getattr 获取对象的属性和方法 print(getattr(obj, 'x')) # 输出: 10 getattr(obj, 'my_method')() # 输出: Hello, World! # 使用 hasattr 检查对象是否具有属性和方法 print(hasattr(obj, 'x')) # 输出: True print(hasattr(obj, 'y')) # 输出: False # 使用 setattr 设置对象的属性和方法 setattr(obj, 'y', 20) print(obj.y) # 输出: 20 setattr(obj, 'my_method', lambda: print("Hello, Python!")) obj.my_method() # 输出: Hello, Python! ``` 除了使用内置函数之外,Python中还有另一种反射机制,即使用元类。元类是用于创建类的类,可以通过元类来动态地创建、修改和删除类的属性和方法。元类的使用超出了本文的范围,感兴趣的读者可以自行学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王大力测试进阶之路

打赏博主喝瓶水吧!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值