tem*_*ame 24 python python-3.x
通过阅读文档,我完全理解getattr()和setattr()的作用.但它也明确地说明了getattr(x, 'foobar')相当于x.foobar和setattr(x, 'foobar', 123)等同于x.foobar = 123.
那我为什么要用呢?
Mar*_*ers 41
因为您也可以使用动态变量:
somevar = 'foo'
getattr(x, somevar)
Run Code Online (Sandbox Code Playgroud)
您不能使用常规属性访问语法来执行此操作.
请注意,getattr()如果缺少该属性,还会返回一个可选的默认值:
>>> x = object()
>>> getattr(x, 'foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'foo'
>>> getattr(x, 'foo', 42)
42
Run Code Online (Sandbox Code Playgroud)
使用getattr()你可以从其他东西中提取属性名称,而不是文字:
for attrname in dir(x):
print('x.{} = {!r}'.format(attrname, getattr(x, attrname))
Run Code Online (Sandbox Code Playgroud)
或者您可以setattr()用来设置动态属性:
for i, value in enumerate(dynamic_values):
setattr(i, 'attribute{}'.format(i), value)
Run Code Online (Sandbox Code Playgroud)
如果要访问的属性是变量而不是文字字符串,则使用它们.它们允许您参数化属性访问/设置.
没有理由这样做getattr(x, 'foobar'),但你可能有一个被称为attr"foobar"或"otherAttr" 的变量,然后就可以了getattr(x, attr).
另一种情况可能表明它们并不完全相同:
\n\nclass A:\n def __init__(self)\xef\xbc\x9a\n self.__var = 10\n setattr(self, '__var2', 100)\n\na = A()\nprint(a.__var2)\n# 100\nprint(a.__var)\n# AttributeError: 'A' object has no attribute '__var'\nRun Code Online (Sandbox Code Playgroud)\n\n至少,setattr与 不完全相同.。
| 归档时间: |
|
| 查看次数: |
4473 次 |
| 最近记录: |