Python 做自动化测试之 Python 反射机制的应用

目录

前言:

通常,我们操作对象的属性或者方法时,是通过点 “.” 操作符进行的。例如下面的代码:

反射是另外一种操作对象属性和方法的手段,例如:

1. 反射的四个函数

2. 类的反射操作

3. 当前模块的反射操作

4. 其他模块反射操作

5. 反射应用场景之一

6. 反射应用场景之二


前言:

Python 是一种广泛使用的编程语言,它可以用于开发各种软件和应用程序。Python 反射机制是 Python 中的一个重要概念,它可以帮助我们更轻松地访问和修改类、方法和属性。

 

通常,我们操作对象的属性或者方法时,是通过点 “.” 操作符进行的。例如下面的代码:

class Person:
    type = "mammal"

    def __init__(self, name):
        self.name = name

    def say_hi(self):
        print('Hello, my name is', self.name)

    @staticmethod
    def feed():
        print("Three times per day.")

    @classmethod
    def sleep(cls):
        print("8 hours!")


p = Person('Chunming')
p.say_hi()
print(p.name)
上面代码的输出是:
Hello, my name is Nikhil
Nikhil
反射是另外一种操作对象属性和方法的手段,例如:

func = getattr(p, 'say_hi')
func()
print(getattr(p, "name"))
上面这段代码的输出是:
Hello, my name is Nikhil
Nikhil
可见与通过点操作符的结果一致。

1. 反射的四个函数

getattr 是获取对象属性或方法的函数,Python 的官方文档是这样描述其用法的:
getattr(object, name, value)
返回对象命名属性的值。name 必须是字符串。如果该字符串是对象的属性之一,则返回该属性的值。例如, getattr(x, 'foobar') 等同于 x.foobar。如果指定的属性不存在,且提供了 default 值,则返回它,否则触发 AttributeError。
根据文档理解上述代码,getattr(p, 'say_hi') 获取了 p 对象的 say_hi 属性值并赋值给 func 变量,因为 say_hi 属性在 Person 类中是一个方法,要想调用这个方法, 需要执行 func(),getattr(p, "name") 则是获取 p 对象的 name 属性。

除了获取对象属性和方法的 getattr 函数,python 还内置了判断、设置、删除对象属性和方法的函数,来看看 Python 官方文档对这三个函数的说明:
setattr(object, name, value)

此函数与 getattr() 两相对应。其参数为一个对象、一个字符串和一个任意值。字符串指定一个现有属性或者新增属性。函数会将值赋给该属性,只要对象允许这种操作。例如,setattr(x, 'foobar', 123) 等价于 x.foobar = 123。

hasattr(object, name)

该实参是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回 True,否则返回 False。(此功能是通过调用 getattr(object, name) 看是否有 AttributeError 异常来实现的。)

delattr(object, name)

setattr() 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许,该函数将删除指定的属性。例如 delattr(x, 'foobar') 等价于 del x.foobar 。
Python 中通过 getattr、setattr、hasattr 和 delattr 四个函数操作属性的机制就是反射。是通过字符串的形式操作对象属性和方法的机制。下面对 p 属性应用 setattr、hasattr 和 delattr 这三个函数看看效果:

判断 p 对象是否有 say_bye 属性和 say_hi 属性:
print(hasattr(p, 'say_bye')) # 输出 False
print(hasa

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值