【发布时间】:2019-12-01 22:06:37
【问题描述】:
我最近发现你可以在 Python 中使用枚举,但我对我的代码的工作方式不满意,我想知道是否有更简洁的方法来实现它。
from enum import Enum
class Hex:
def __init__(self, hex_code: str):
self.code = hex_code
class Rgb:
def __init__(self, R: int, G: int, B: int):
self.r = R
self.g = G
self.b = B
class Color(Enum):
HEX = Hex
RGB = Rgb
def main():
hex_color = Color.HEX.value('#00FF00')
rgb_color = Color.RGB.value(255, 255, 255)
if __name__ == "__main__":
main()
在这个例子中,我必须通过调用.value() 枚举方法来实例化。但是当你正常实例化一个类时,你所做的只是Class(value)。是否可以实现类似于包含类的枚举变体的东西?
例如:
Color.HEX('#00FF00')
# Instead of:
Color.HEX.value('#00FF00')
【问题讨论】:
-
不,必须从根本上改变
enum的工作方式。您在这里枚举的用例是什么?为什么不直接使用这些类?在任何情况下,value不是一种方法,它只是枚举对象上的属性,它包含您提供给该枚举成员的 value。 -
@chepner 我不确定 OP 是否正在尝试动态生成一个类。
-
@chepner 但对我来说,问题似乎是 OP 希望能够调用
Color.HEX()来实例化一个实例,而不是Color.HEX.value()。老实说,要做你想做的事,我只需要使用类定义语句和简单的del名称,如果这让我感到困扰的话。当然,我只是认为这不是enum的用例 -
其实我忘了,因为
class语句只是一个花哨的赋值语句,你可以直接将Hex和Rgb的定义嵌套在Color中,这样就消除了需要typehackery。确实,它并没有消除必须使用value来取回实际类型实例的问题。 -
我运行了你的代码,不幸的是IDLE的子进程没有建立连接
标签: python python-3.x class enums instance