In Python, how do I correctly define a classmethod of a parent class that references an attribute of a child class?
from enum import Enum
class LabelledEnum(Enum):
@classmethod
def list_labels(cls):
return list(l for c, l in cls.__labels.items())
class Test(LabelledEnum):
A = 1
B = 2
C = 3
__labels = {
1: "Label A",
2: "Custom B",
3: "Custom label for value C + another string",
}
print(Test.list_labels())
# expected output
# ["Label A", "Custom B", "Custom label for value C + another string"]
In the code above I expect that Test.list_labels() will correctly print out the labels, however because the __labels dictionary is defined with the double underscore, I cannot access it correctly.
The reason I wanted to have double underscore is to make sure that the labels would not show up when iterating over the enumerator, e.g. list(Test) should not show the dictionary containing labels.
getattribute(cls, f"_{cls.__name__}__labels", {}), not sure if it's guaranteed to work in every situation.