我需要一個雙繼承的類,它是一個Enum,但也支持我自己的方法。 以下是背景:
import abc
from enum import Enum
class MyFirstClass(abc.ABC)。
@abc.abstractmethod[/span]。
def func(self)。
pass。
class MySecondClass(Enum,MyFirstClass)。
VALUE_1 = 0
VALUE_2 = 1def func(self)。
return 42
MySecondClass的宣告產生了以下錯誤:
TypeError: metaclass conflict: 一個派生類的metaclass必須是它所有基類的metaclass的(非嚴格的)subclass
我試著應用這個 stackoverflow 解決方案,方法是:
class MyMetaClass(type(Enum)。type(MyFirstClass))。
pass: pass.
class MyFinalClass(Enum, MyFirstClass, metaclass=MyMetaClass)。
VALUE_1=0
VALUE_2 = 1def func(self)。
return 42
但是我得到了以下錯誤:
我得到了以下錯誤。
TypeError: new enumerations should be created as `EnumName([mixin_type, ...] [data_type,] enum_type)`
這是一個專門針對Enum型別的問題,還是我錯過了關于元類的其他東西?
uj5u.com熱心網友回復:
解決你眼前問題的辦法是:
class MyFinalClass(MyFirstClass, Enum, metaclass=MyMetaClass)。
pass。
注意,Enum是最后一個列出的常規類。
對于一個完整的抽象Enum,你要使用本答案中的ABCEnumMeta--否則缺少的抽象方法將不能被正確標記。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/320090.html
標籤:
上一篇:創建不同種類或型別的形狀物件如矩形或三角形的靈活方法是什么?
下一篇:如何改變svg圖示的筆畫寬度?
