如何让 "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.
所以我写了这个模块:
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.