【问题标题】:how can I access attributes that have the same name as reserved keywords?如何访问与保留关键字同名的属性?
【发布时间】:2019-06-17 13:05:33
【问题描述】:

我正在调用一个返回 AttributeDict 的 API,该 API 具有许多属性,例如 tofrom

为了访问这些属性,我使用点符号。例如,我使用object.to,效果很好。

当我尝试使用 object.from 时,我收到一条错误消息,显示为 SyntaxError: invalid syntax。我认为这是因为from is a keyword in Python

如果是这种情况,是否可以使用点访问from?目前,我正在使用object["from"],它可以正常工作,但与我的其余代码不匹配。

【问题讨论】:

  • 这就是为什么AttributeDict 通常是a bad idea。他们抹黑了“数据”和“代码”之间的界限。
  • 实例和类属性遵循与变量相同的命名约定。从某种意义上说,变量是模块的属性。

标签: python python-3.x keyword


【解决方案1】:

虽然可以使用getattr 来访问这些属性:

val = getattr(ad, 'from')

这比您的 AttributeDict 支持的 ad['from'] 语法更麻烦,并且不能满足您对点符号的需求。

目前没有使用点分符号访问此类属性的选项。只要坚持索引。它处理保留名称、带有空格/连字符/等的名称。其中,以及与现有方法冲突的名称(假设一个合理的 AttributeDict 实现)。即使您使用了getattrgetattr(ad, 'get') 仍然可能返回 AttributeDict 的 get 方法,而不是 'get' 键的值。

【讨论】:

  • 是否通常建议在程序的任何地方都使用索引?
  • @python_crypto_questions 首先不建议为属性赋予与关键字相同的名称。建议只使用obj.attribute 语法。
猜你喜欢
  • 2021-09-05
  • 1970-01-01
  • 2017-07-06
  • 2020-03-31
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多