【问题标题】:Python3 | Add decorator to enum entry [duplicate]Python3 |将装饰器添加到枚举条目[重复]
【发布时间】:2021-03-01 17:00:55
【问题描述】:

所以,我有一个可以读取某个文件的库(文件布局不在我的控制范围内)。这些文件具有版本,并且每个版本都添加了更多功能。我有代表某些功能的枚举。现在有了最新的更新,应该将新条目添加到枚举中。但是,当用户尝试在旧版本中使用新功能时,我希望能够给他们一个警告(或例外)。

我认为装饰器可能是要走的路,标记某些值和功能,例如:@from_version('1.40') 或类似的东西。我从来没有创建过自己的装饰器,所以我对它们不太熟悉。

最后一个问题,文件的版本不是全球可用的。 (我不能添加一些静态的东西,因为应该能够一次打开多个文件)。所以我什至不确定装饰器是否是要走的路。

现在我尝试向 Enum 条目添加装饰器,但没有奏效:

import enum
>>> def hello_world(f):
...     def decorated(*args, **kwargs):
...         print('Hello World!')
...     return decorated
... 
>>> class A(enum.Enum):
...     @hello_world()  # Tried with and without ()
...     ABC = 1
  File "<input>", line 3
    ABC = 1
    ^
SyntaxError: invalid syntax

所以我想知道如何将它添加到枚举中,我还尝试在枚举中添加一个属性,以便我可以添加装饰器,但即使添加属性也不起作用......

TL;DR

如何将自己的装饰器添加到特定的枚举条目?我希望它看起来像这样:

class EnumClass(Enum):
    @from_version('1.40')
    ENTRY = 0

提前感谢您的帮助!

【问题讨论】:

    标签: python-3.x enums python-decorators


    【解决方案1】:

    你想要的是一个单独的答案,但要解释你遇到的问题——装饰器只能用于函数和类(defclass),不能用于属性(比如@987654323 @。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多