欢迎访问宙启技术站
智能推送

Python中的getattr()和setattr()函数以及如何使用它们

发布时间:2023-06-30 16:20:53

在Python中,getattr()和setattr()是两个内置函数,用于获取和设置对象的属性。

getattr()函数用于获取对象的属性值。它接受两个参数:对象和属性名。例如,如果有一个对象obj和一个属性name,可以使用getattr(obj, 'name')来获取obj的name属性的值。如果属性不存在,getattr()函数可以提供一个默认值作为第三个参数。如果没有指定默认值,而属性不存在,getattr()函数会引发AttributeError异常。

例如,假设有一个Person类,具有name和age属性:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person('Alice', 25)

print(getattr(p, 'name'))  # 输出 'Alice'
print(getattr(p, 'age'))   # 输出 25
print(getattr(p, 'gender', 'Unknown'))  # 输出 'Unknown'

在上面的示例中,使用getattr()函数获取了p对象的name和age属性的值。然后,尝试获取p对象的gender属性的值,而该属性不存在,因此给定了一个默认值'Unknown'。

setattr()函数用于设置对象的属性值。它接受三个参数:对象、属性名和属性值。例如,如果有一个对象obj和一个属性name,可以使用setattr(obj, 'name', value)来设置obj的name属性的值为value。

setattr(p, 'name', 'Bob')
print(getattr(p, 'name'))  # 输出 'Bob'

在上面的示例中,使用setattr()函数将p对象的name属性的值设置为'Bob',然后用getattr()函数验证了属性值的修改。

此外,getattr()和setattr()函数还可以用于动态地获取和设置对象的属性。这可以在需要通过字符串来引用属性名的情况下非常有用。

attr_name = 'name'
print(getattr(p, attr_name))  # 输出 'Bob'

setattr(p, attr_name, 'Charlie')
print(getattr(p, attr_name))  # 输出 'Charlie'

在上面的示例中,使用变量attr_name来存储属性名,在getattr()和setattr()函数中使用该变量来获取和设置属性。

综上所述,getattr()和setattr()函数是Python中非常有用的内置函数,它们可以方便地获取和设置对象的属性。请记住,在使用这些函数时,务必注意属性名的正确性和是否引发异常。