为什么使用 setattr() 和 getattr() 内置函数?

通过阅读文档,我完全了解getattr()和setattr() 的作用。但它也明确表示getattr(x, 'foobar')等价于x.foobar和setattr(x, 'foobar', 123)等价于x.foobar = 123。

那么我为什么要使用它们呢?

已邀请:

fish - Hadooper

因为您也可以使用动态变量:

somevar = 'foo'
getattr(x, somevar)
您不能使用常规属性访问语法来做到这一点。

请注意,getattr()它还采用可选的默认值,如果缺少属性,则返回:

>>> x = object()
>>> getattr(x, 'foo')
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'object' object has no attribute 'foo'
>>> getattr(x, 'foo', 42)
42
使用getattr()您可以从其他东西中提取属性名称,而不是文字:

for attrname in dir(x):
print('x.{} = {!r}'.format(attrname, getattr(x, attrname))
或者您可以使用setattr()设置动态属性:

for i, value in enumerate(dynamic_values):
setattr(i, 'attribute{}'.format(i), value)

要回复问题请先登录注册