如何将 Enum 的成员放入全局命名空间?

2023-11-21

Python 现在有一个 Enum 类型(3.4 中新增)与 PEP 435,还有向后移植),虽然命名空间是一件好事,但有时枚举更像常量,并且枚举成员应该位于全局(呃,模块)命名空间中。

所以而不是:

Constant(Enum):
    PI = 3.14

...

area = Constant.PI * r * r

我只能说:

area = PI * r * r

有没有简单的方法可以从Constant.PI只是PI?


官方支持的方法是这样的:

globals().update(Constant.__members__)

这有效是因为__members__ is the dict-like 对象,保存 Enum 类的名称和成员。

我个人觉得这很丑陋,所以我通常将以下方法添加到我的枚举类中:

@classmethod
def export_to(cls, namespace):
    namespace.update(cls.__members__)

然后在我的顶级代码中我可以说:

Constant.export_to(globals())

注意:仅当模块只有一个此类导出的 Enum 时,将 Enum 导出到全局命名空间才有效。如果您有多个,最好为 Enum 本身使用一个较短的别名,并使用它而不是污染全局名称空间:

class Constant(Enum):
    PI = ....
C = Constant

area = C.PI * r * r
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Enum 的成员放入全局命名空间? 的相关文章

随机推荐

  • 如何使用 javascript 从字符串中删除 `//` ?

    如何去除 使用来自字符串的javascript var title 需要成为 var title A Survey of Applications of Identity Based Cryptography in Mobile Ad Ho
  • 有没有更好的方法来确定 UITableViewCell 的正确大小?

    我有一个 UITableView 单元格 该单元格的大小将根据其内容 可能是几行文本 而变化 既然看起来 heightForRowAtIndexPath 被调用before我布局单元格 我只是通过在文本字符串上调用 NSString siz
  • 如何使用不同的tsconfig文件进行测试?

    在我的项目中我使用 2 个不同的 tsconfig 文件 tsconfig json tsconfig specs json 供测试用 我如何告诉 Intellij Idea 两者都使用 即在Settings Langauges Frame
  • PHP REST 下载文件

    我有一个具有这样功能的网络服务 app gt get downloadPdf function use app log example pdf res app gt response res Content Description File
  • 如何确定Apple Watch型号?

    The WKInterfaceDevice current model属性没有给出型号 对于 Apple Watch 该字符串的值为苹果手表 如何从 iOS 确定确切的 Apple Watch 型号 只是稍微更新了 Mathieu Vand
  • 在 SQL 中,如何将位掩码总计中的值拆分为逗号分隔的字符串

    我有一个位掩码值作为 int 存储在 sql 中 我想将该值转换为位掩码值中包含的值的逗号分隔列表 例如 结果可能如下所示 id name bitMaskValue values 1 Bob 5 1 4 2 Mary 13 1 4 8 3
  • 如何更改 Xamarin 表单导航页面中的背景颜色

    我正在尝试更改 navigationPage 中 navigationBar 的背景颜色我正在使用以下代码 using System using System using Xamarin Forms using System Collect
  • 要列出的 Pandas DataFrame 列[重复]

    这个问题在这里已经有答案了 我根据另一列中满足的条件从一列中提取数据子集 我可以得到正确的值 但它在 pandas core frame DataFrame 中 我如何将其转换为列表 import pandas as pd tst pd r
  • 从 android 将 JSONArray 发布到 WCF 服务

    我在将 JSONArray 值发布到我的 WCF 服务时遇到问题 当我从 Fiddler 或 Net Test Client 发布数据时 它工作正常 每次我尝试从我的 Android 应用程序发布时 我都会收到请求错误 这是我从 Andro
  • 如何在 MySQL 中正确使用 CASE..WHEN

    这是一个演示查询 注意它非常简单 仅在 base price 为 0 的情况下获取 但它仍然选择条件 3 SELECT CASE course enrollment settings base price WHEN course enrol
  • 如何在共享主机上安装 Composer?

    我有这些东西 文件http api odtu lu composer phar http api odtu lu phpinfo php FTP 访问 cPanel FreeBSD 上的 Cron 作业 PHP Perl CGI BIN P
  • Python 相当于 Ruby 的 .select

    我有一个列表 数组 我们称之为x 我想创建一个新的列表 数组 我们称之为这个z 从元素中x符合某种条件 在 Ruby 中 您可以通过调用列表 数组上的 select 方法来做到这一点 如下所示 x 1 2 3 4 5 6 7 8 9 10
  • 延迟加载单例:双重检查锁定与按需初始化持有者习惯用法

    我需要在并发环境中延迟加载资源 加载资源的代码应该只执行一次 Both 双重检查锁定 使用 JRE 5 和 volatile 关键字 和按需初始化持有者习惯用法似乎很适合这份工作 仅通过查看代码 按需初始化持有者习惯用法似乎更干净 更高效
  • Android onTouch 与 onClick 和 onLongClick

    我有一个自定义视图 其作用类似于按钮 我想在用户按下它时更改背景 当用户将手指移到外面或释放它时将背景恢复为原始状态 我还想处理 onClick onLongClick 事件 问题是 onTouch 要求我返回 trueACTION DOW
  • asp.net 5 mvc 6 loginUrl更改路径

    在 VS 2015 WebApplication 中创建新项目时 如果未授权 您将如何更改重定向登录 URL 路径 我创建了一个新区域 在其中创建了一个登录控制器 此登录控制器要求您获得授权 但是当尝试访问这些页面时 我被重定向到 Acco
  • UIViewContentMode模式指的是什么类型的内容?

    根据 UIView 的官方文档contentMode财产 The content mode specifies how the cached bitmap of the view s layer is adjusted when the v
  • 将操作栏更改为从 Fragment 内覆盖

    我有一个片段 片段 1 它被另一个片段 片段 2 替换 片段 1 被放置在堆栈上 我正在使用兼容模式 不是 ActionBarSherlock 这是我的问题 我希望操作栏在某些片段中显示为叠加 但在其他片段中则不然 具体来说 当显示片段 2
  • Ruby:在结构体中定义常量的语法

    考虑以下 正确的 Ruby 程序 class Outer Inner Struct new dummy do CONST abce def fun puts dummy end end end obj Outer Inner new 15
  • 最难逆向的 JavaScript 混淆器 [重复]

    这个问题在这里已经有答案了 我正在寻找目前最难逆向的 JavaScript 混淆器 如果它可以在自己的服务器上运行 则会加分 性能下降和代码膨胀都很好 用 Java 编写 然后使用混淆后的 JavaScript 运行字节码orto 这需要两
  • 如何将 Enum 的成员放入全局命名空间?

    Python 现在有一个 Enum 类型 3 4 中新增 与 PEP 435 还有向后移植 虽然命名空间是一件好事 但有时枚举更像常量 并且枚举成员应该位于全局 呃 模块 命名空间中 所以而不是 Constant Enum PI 3 14