全栈自动化测试之python基础类的自定义属性访问及动态属性设置

文章末尾给大家准备了大量福利哟

前言

本文主要介绍python类的一些自定义属性访问的方法,以及类的动态属性设置即python的内置函数setattr()。

 

一、自定义属性访问

什么是属性?下面的例子a和b是属性吗?不是,他们是全局变量,属性(attribute)是类中的成员变量,也可以理解为属性就是类变量。

a = 11234
b = 'python'

类中的变量是静态变量,类可以直接访问,python是一门动态语言,任何实例对象都可以动态地添加或删除属性,一个类定义了一个作用域,类实例对象也引入了一个作用域,这与类定义的作用域是不同的。在类实例对象中查找属性的时候,首先在实例自己的作用域中查找,如果没有找到,则再去类定义的作用域中查找。在对类实例属性进行赋值的时候,实际上会在类实例定义的作用域中添加一个属性或修改一个属性,但并不会影响到对应类中定义的同名属性。那么从访问属性到返回结果的过程是怎么运作的呢?是通过下面几个魔术方法来实现的。

二、相关方法的使用

  • __getattribute__:查找属性时会先触发该方法进行属性查找
  • __getattr__:查找属性没找到的时候触发
  • __setattr__:设置属性的时候触发
  • __delattr__:删除属性的时候触发

为了直观地感受实例访问属性时都做了什么,我们看一下下面的例子:

class TestCase:
    att_1 = 'hello'  # 定义类属性
    att_2 = 'python'

    def test_func(self):  # 定义方法
        print("这是一个方法")

    def __getattribute__(self, item):
        # 属性访问拦截器:当对象访问属性时,会自动触发这个方法,由这个方法来决定返回的属性值
        # 应用场景:访问不存在的属性时,不希望它报错,可以用try--except来捕获异常返回一个值或提示信息
        # try:
        #     return super().__getattribute__(item)  # 调用父类真正的__getattribute__方法返回正确的属性值
        # e
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值