I want to list all enumeration items with a method. The method is defined in the base class as class functions. The base class has subclasses, and the subclasses have additional subclasses. I used the python extension extendable-enum.
I updated the example code:
from enum import Enum
from extendableenum import inheritable_enum
import inspect
@inheritable_enum
class baseClass(Enum):
BASEELEMENT= 'Baseelement'
@classmethod
def list(cls):
classHierachy = inspect.getmro(cls)
for singleClass in classHierachy[0:-2]:
print(singleClass.__name__) # debug output
print(list(map(lambda singleClass: singleClass.name, eval(singleClass.__name__))))
def get_list_with_bases(class1, output=None):
if output is None:
output = []
try:
names = list(class1)
except TypeError:
return output
for class2 in class1.__bases__:
get_list_with_bases(class2, output)
output.extend(names)
return output
@inheritable_enum
class middleClass(baseClass):
MIDDLECLASSELEMENT = 'middleClassElement'
class endClass(middleClass, baseClass):
ENDCLASSELEMENT = 'endClassElement'
print(endClass.BASEELEMENT)
print(endClass.MIDDLECLASSELEMENT)
print(endClass.ENDCLASSELEMENT)
endClass.list()
# endClass.get_list_with_bases(endClass)
Expected output:
baseClass.BASEELEMENT
middleClass.MIDDLECLASSELEMENT
endClass.ENDCLASSELEMENT
endClass
['ENDCLASSELEMENT']
middleClass
MIDDLECLASSELEMENT
baseClass
BASEELEMENT
But I get:
baseClass.BASEELEMENT
middleClass.MIDDLECLASSELEMENT
endClass.ENDCLASSELEMENT
endClass
['ENDCLASSELEMENT']
middleClass
[]
baseClass
[]
According to the example available in the project repo it looks like it can't be accessed that way
https://github.com/gweesip/extendable-enum/blob/main/docs/examples/example_inheritable_enum.py