setattr不遵守属性命名约定

时间:2019-10-02 12:47:30

标签: python-3.x attributes naming-conventions setattr

前几天我遇到了一个很奇怪的地方,下面的代码:

class Obj:
    pass
obj = Obj()
setattr(obj, '@#^&%$&', None)

实际可行。如果以下内容引发了语法错误,为什么允许这种行为? : obj.@#^&%$&

1 个答案:

答案 0 :(得分:0)

所有setattr函数所做的就是将给定键处的给定值分配给对象的__dict__字典。它不会对密钥进行任何验证,因此您可以使用getattr检索值,如下所示:

getattr(obj, '@#^&%$&')

返回您分配给所述键的值:

None

但是,点符号后的属性名称不是加引号的字符串的一部分,因此必须遵循Python命名语法,否则解释器无法正确解析它。

相关问题