setattr将设置不能与常规属性访问一起使用的名称,即obj.name.
>>> from types import SimpleNamespace
>>> my_instance = SimpleNamespace()
>>> setattr(my_instance, 'from', 0) # works
>>> getattr(my_instance, 'from')
0
>>> my_instance.from
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
如何检查这些名称,以避免使用它们?
在Python 3上,
import keyword
type(key) is str and key.isidentifier() and not keyword.iskeyword(key)
Run Code Online (Sandbox Code Playgroud)
我们检查属性名称是否为字符串,它是否符合Python标识符的格式,并且它不是关键字.isidentifier不排除关键字,因此需要额外检查.
(是的,isinstance是一件事,但我真的不想允许str子类.)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |