如何检测无法通过 obj.name 语法访问的属性名称?



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

如何检查此类名称以避免使用它们?

在 Python 3 上,

import keyword
type(key) is str and key.isidentifier() and not keyword.iskeyword(key)

我们检查属性名称是否为字符串,是否符合 Python 标识符的格式,以及它是否不是关键字。 isidentifier不会排除关键字,因此需要进行额外的检查。

(是的,isinstance是一回事,但我真的不想允许str子类。

最新更新