gpt4 book ai didi

Python:如何使用嵌套枚举作为嵌套它的函数的默认参数?

转载 作者:行者123 更新时间:2023-12-04 09:48:50 41 4
gpt4 key购买 nike

有没有办法在 python 中做这样的事情?

from enum import Enum, auto
def some_func(mode = Mode.A):
class Mode(Enum):
A = auto()
print(mode == Mode.A)

期望的结果

>>> some_func()
True

上面的代码片段失败并显示 NameError: name 'Mode' is not defined 大概是因为当解释器读取 def some_func(mode = 模式.A):

您当然可以将 Enum 放在函数之外,但是,如果我建议的或类似的东西起作用,我宁愿将它放在函数内部。将它保留在封装 Mode 的内部,以便在它打算使用的地方使用,希望允许 . 语法将它与其他类似的 Mode 类区分开来。

我知道很多 python 代码只是为此目的使用字符串,而不是使用枚举。但是我想找到一个使用枚举的解决方案。枚举更易于维护并帮助 IDE 生成代码完成等。

有什么好的方法可以让这项工作成功吗?

最佳答案

函数的调用者无权访问函数内部声明的局部变量。因此,本地声明的类不能成为外部接口(interface)的一部分。

如果调用者根本无法访问枚举,则不应接受它作为参数;只需在函数体内声明和实例化枚举,并使其对调用者完全隐藏。

如果枚举旨在作为公共(public)接口(interface)的一部分由调用者访问,则需要在与函数本身相同/更高的范围内声明它(即在函数外部)。

如果您想封装函数和枚举,典型的方法是类(即函数和枚举都是类的公共(public)成员)。


如果您真的希望能够作为函数的成员访问枚举类,您可以做一些古怪的事情,例如:

from enum import Enum, auto
from typing import Optional


class SomeFunc:

class Mode(Enum):
A = auto()
B = auto()

def __call__(self, mode: Optional['Mode'] = None) -> None:
if mode is None:
mode = self.Mode.A
print(mode == self.Mode.A)


some_func = SomeFunc()

some_func()
some_func(some_func.Mode.B)

关于Python:如何使用嵌套枚举作为嵌套它的函数的默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62046974/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com