我正在try 编写一个同时包含其定义的对象的行为和静态实例的类,在执行此操作时,我try 使用dataclass(frozen=True)
和enum
.
@dataclass(frozen=True)
class Foo(Enum):
a: int
b: float
FOO1 = Foo(1, 1.0)
FOO2 = Foo(2, 0.5)
这种方法的一个明显复杂之处在于,您不能根据类本身定义类级变量,因此我不得不使用以下内容:
@dataclass(frozen=True)
class _Foo:
a: int
b: float
class Foo(Enum):
FOO1 = _Foo(1, 1.0)
FOO2 = _Foo(2, 0.5)
但是,这样做会导致类型提示问题,因为代码认为FOO1
和FOO2
是Foos
的实例,而不是Foo
的实例.所以好的,这可能是一个简单的解决办法,所以我说:
@dataclass(frozen=True)
class _Foo:
a: int
b: float
@dataclass(frozen=True)
class Foo(_Foo, Enum):
FOO1 = _Foo(1, 1.0)
FOO2 = _Foo(2, 0.5)
这现在会导致程序错误地显示TypeError: _value_ not set in __new__, unable to create it
,而我现在不知所措.有没有一种方法可以有效地混合数据类和枚举,或者有没有更好的方法?