python自动化测试学习笔记(十二)动态设置属性

这篇博客详细介绍了Python中动态设置属性的方法,包括使用hasattr判断属性是否存在,getattr获取属性,setattr设置或修改属性,以及delattr删除属性。文章通过实例展示了这些函数的用法和注意事项,特别提到了动态属性操作在遇到不存在的属性或删除已定义属性时的行为。

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

动态设置属性,有时候也会叫反射(java里面这样叫)

在这里插入图片描述

一、hasattr–判断属性是否存在

语法:hasattr(类/对象,“属性名”)

class Dog:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("我的狗子是{},它{}岁了".format(name,age))

    def run(self):
        print("狗类会跑!!!")

    def catch_mouse(self):
        print("狗类会抓老鼠!!!")
        
my_dog = Dog("柴犬",2)
# 检查对象是否有属性名name
a = hasattr(my_dog,"name")
print(a)
# 检查类是否有属性名kind
b = hasattr(Dog,"kind")
print(b)

运行后:
在这里插入图片描述

二、getattr–获取属性

语法:getattr(类/对象,“属性名”,没有该属性时返回的值)

注:若属性不存在时,未指定返回值,此时会报错

class Dog:
    kind = "狗"
    sex ="公"
    color = "黄"
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("我的狗子是{},它{}岁了".format(name,age))

    def run(self):
        print("狗类会跑!!!")

    def catch_mouse(self):
        print("狗类会抓老鼠!!!")

my_dog = Dog("柴犬",2)
# 获取对象的属性name
a = getattr(my_dog,"name")
print(a)
# 获取类的属性kind
b = getattr(Dog,"kind")
print(b)
# 获取类没有的属性wang
c = getattr(Dog,"wang","没有这个属性呢")
print(c)

运行后;
在这里插入图片描述

三、setattr–设置属性

语法:setattr(类/对象,“属性名”)

动态给对象/类设置属性,如果属性存在则修改属性的值;如果不存在,添加属性

class People:
    sex = "男"
    def __init__(self,name):
        self.name = name

p = People("luban")
# setattr  如果属性存在,修改属性值。如果不存在,添加属性。
# 类属性不存在,添加类属性
setattr(People,"kind","黄种人")
print(People.kind)
# 类属性存在,修改类属性值
setattr(People,"sex","女")
print(People.sex)
print("=================================")
# 对象属性不存在,添加属性
setattr(p,"age",29)
print(p.age)
# 对象属性存在,修改属性值
setattr(p,"name","houyi")
print(p.name)

运行后:
在这里插入图片描述

四、delattr–删除属性

语法:delattr(类/对象,“属性名”)

① 删除动态添加的属性

class People:
    sex = "男"
    def __init__(self,name):
        self.name = name

p = People("luban")
# setattr  如果属性存在,修改属性值。如果不存在,添加属性。
# 类属性不存在,添加类属性
setattr(People,"kind","黄种人")
print(People.kind)
# 删除动态添加的类属性
delattr(People,"kind")
print(People.kind)

运行后报错;
在这里插入图片描述
② 删除类定义时的属性

class People:
    sex = "男"
    def __init__(self,name):
        self.name = name

p = People("luban")
# 删除类定义时的属性
delattr(People,"sex")
print(People.sex)

运行后报错:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值