Python进阶之hasattr()、getattr()和setattr()函数的使用

Python进阶之hasattr()、getattr()和setattr()函数的使用
最新回答
酒色清浅

2023-01-18 13:39:35

在Python中,`hasattr()`, `getattr()`和`setattr()`这三个函数在对象属性管理上扮演着关键角色,尤其在阅读源码或开发过程中,它们提供了高效且灵活的解决方案。

`hasattr(object, name)`这个函数用于判断`object`对象中是否存在`name`属性。无论属性是变量还是方法,`name`参数始终以字符串形式传递。其返回值为布尔类型,存在返回`True`,不存在返回`False`。

`getattr(object, name[, default])`函数用于获取`object`对象的属性值。若`name`存在,则返回该属性值;若不存在,有两种情况:若无`default`参数,则直接抛出`AttributeError`异常;若设置了`default`参数,将返回`default`值。当`name`为方法时,返回的是函数对象,需通过调用执行函数。

在`getattr()`使用中,实例函数与类函数的区别值得留意。以类`A`为例:

python
class A:
name = 'python'
def func(self):
return 'Hello world'

python
>>> getattr(A, 'name')
'python'
>>> getattr(A, 'age') # 'age'属性不存在则报错
Traceback (most recent call last):
File "", line 1, in
AttributeError: class A has no attribute 'age'
>>> getattr(A, 'age', 20)
20
>>> getattr(A, 'func')()
'Hello world'

可以看出,`func()`方法不能直接通过`A`类调用,需要通过实例化对象来执行。而当`func()`被定义为类方法时:

python
class A:
name = 'python'
@classmethod
def func(cls):
return 'the method of A object.'

python
>>> getattr(A, 'func')()
'the method of A object.'

`setattr(object, name, value)`函数用于给`object`对象的`name`属性赋值`value`。若`object`中已有`name`属性,则更新其值为`value`;若无,则在`object`中创建新属性并赋值。

通常在实际开发中,先检查`object`是否已存在`name`属性,存在则直接使用,不存在则创建属性并赋值。通过这三个函数,可以更有效地管理和操作Python对象的属性,提升代码的灵活性和可维护性。