如何让 "lowercase" 命名空间与 cls.__members__ 一起工作?

How can I get "lowercase" namespace with cls.__members__ to work?

所以我写了这个模块:

plaform.py

from enum import IntFlag

class PlatformFlag(IntFlag):
    LINUX = 1,
    MACOSX = 2,
    WINDOWS = 3
globals().update(PlatformFlag.__members__)

我正在尝试这样使用它:

import platform

if __name__ == '__main__':
    if platform.WINDOWS:
        print("This is Windows!")

但是,我得到:

"Exception has occurred: AttributeError module 'platform' has no attribute 'WINDOWS'"

有效:

import platform

if __name__ == '__main__':
    if platform.PlatformFlag.WINDOWS:
        print("This is Windows!")

但是,这不是理想的实现方式。我正在考虑 cPython 中的 re.py 。他们可以调用它的方式,例如re.compile(模式,标志=re.M)。但是,出于某种我不知道的原因, globals().upate() 似乎没有用,或者我在这里遗漏了一些东西。

Re.py:

https://github.com/python/cpython/blob/master/Lib/re.py

编辑:值得赞扬,https://repl.it/@JoranBeasley/IntentionalPastStrategies

您的问题来自命名,因为有一个名为 platform 的内置模块。

https://docs.python.org/3.7/library/platform.html

运行 您的代码具有另一个名称,如 platform123.py 有效。但是,确定哪个 OS 是 运行 的功能不是您代码的一部分,因此不起作用:)

RE 的工作方式是将标志作为函数的输入。 globals().update(xx.__members__) 仅使 类 的成员在全局命名空间中可用,因此您可以使用 platform.WINDOWS 而不是 platform.PlatformFlag.WINDOWS.