【问题标题】:Create Object With Attribute Named Global使用名为 Global 的属性创建对象
【发布时间】:2021-07-20 23:11:27
【问题描述】:

出于业务逻辑原因,我希望能够创建一个具有名为global 的属性的对象。但我显然不能这样做

class Foo(object):
    
    def __init__(self):
        self.global = True

因为global 是保留关键字,在 Python 中具有特殊含义。使用__getattr____getattribute__ 动态获取属性也有同样的问题。无论如何我可以做到这一点,还是我必须将属性名称设为global_

我需要能够直接从对象访问属性,所以我不能使用getattr(foo, 'global')

【问题讨论】:

  • 不,不幸的是我需要能够直接访问对象上的属性。

标签: python python-3.x


【解决方案1】:

我认为你只需要做 global_,我认为没有任何方法可以绕过它,因为使用保留关键字命名是非法的并且会产生各种问题。

编辑: 你可以看看这篇文章:How to use reserved keyword as the name of variable in python?

【讨论】:

  • 正如链接所指出的,它只是在语法上是非法的。您可以使用 setattr(self, 'global', True) 创建该名称的属性,但出于相同的语法原因,您必须使用 getattr(self, 'global') 访问它。
  • 另外,请注意这个限制是由于旧的 Python 解析器造成的。虽然新的基于 PEG 的解析器 可以 允许 self.global = True 有效,但我不知道是否有任何计划这样做。 (基本上,新语法允许根据上下文保留关键字。这就是添加新的match 关键字的方式,而不会使使用match 作为标识符的代码失效。)
猜你喜欢
  • 2018-12-27
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
相关资源
最近更新 更多