Ich habe eine abstrakte Klasse, aus der Unterklassen abgeleitet werden. Die konkreten Implementierungen sollten eine Enum -Klasse enthalten, die einen Satz benannter Konstanten enthält. < /P>
Code: Select all
from enum import Enum
class AbstractClass:
def run(self)
print('the values are:')
for enum in ClassEnum:
print(enum.value)
self.speak()
def speak(self):
raise NotImplementedError
class ConcreteClassFirst(AbstractClass):
class ClassEnum(Enum):
RED = 0
GREEN = 1
BLUE = 2
def speak(self)
print('the colors are:')
for enum in ClassEnum:
print(enum.name)
class ConcreteClassSecond(AbstractClass):
class ClassEnum(Enum):
LION = 'scary'
ELEPHANT = 'big'
GIRAFFE = 'tall'
def speak(self)
print('the animals are:')
for enum in ClassEnum:
print(enum.name)
Dieser Code gibt tatsächlich das richtige Verhalten an, aber ich möchte, dass es eine Art Notation gibt (ähnlich wie beim NotimplementedError auf dem Abstract Speak () Methode), die angibt, dass der Autor der konkreten Klasse eine innere Enum -Klasse namens CLASSENUM definieren sollte. Es wird tatsächlich für die Run () -Methode benötigt.
Code: Select all
class AbstractClass:
class ClassEnum(Enum):
pass
def run(self):
...
, aber dies erhöht keinen Fehler, wenn die Unterklasse ihre eigene Version von classenum nicht definiert. Wir konnten versuchen < /p>
Code: Select all
class AbstractClass:
class ClassEnum(Enum):
raise NotImplementedError
def run(self):
...
Aber dies wirft vorhersehbar einen Fehler auf, sobald die AbstractClass definiert istclass AbstractClass:
@property
def ClassEnum(self):
raise NotImplementedError
def run(self):
...
< /code>
Aber hier ist nicht klar, dass im Unterklassen CascasSenum tatsächlich eine Klasse sein sollte. Perhpas Dieser Ansatz mit einer gewissen Dokumentation könnte angemessen sein.
Ich habe eine abstrakte Klasse, aus der Unterklassen abgeleitet werden. Die konkreten Implementierungen sollten eine Enum -Klasse enthalten, die einen Satz benannter Konstanten enthält. < /P>
[code]from enum import Enum
class AbstractClass:
def run(self)
print('the values are:')
for enum in ClassEnum:
print(enum.value)
self.speak()
def speak(self):
raise NotImplementedError
class ConcreteClassFirst(AbstractClass):
class ClassEnum(Enum):
RED = 0
GREEN = 1
BLUE = 2
def speak(self)
print('the colors are:')
for enum in ClassEnum:
print(enum.name)
class ConcreteClassSecond(AbstractClass):
class ClassEnum(Enum):
LION = 'scary'
ELEPHANT = 'big'
GIRAFFE = 'tall'
def speak(self)
print('the animals are:')
for enum in ClassEnum:
print(enum.name)
[/code]
Dieser Code gibt tatsächlich das richtige Verhalten an, aber ich möchte, dass es eine Art Notation gibt (ähnlich wie beim NotimplementedError auf dem Abstract Speak () Methode), die angibt, dass der Autor der konkreten Klasse eine innere Enum -Klasse namens CLASSENUM definieren sollte. Es wird tatsächlich für die Run () -Methode benötigt.[code]class AbstractClass:
class ClassEnum(Enum):
pass
def run(self):
...
[/code]
, aber dies erhöht keinen Fehler, wenn die Unterklasse ihre eigene Version von classenum nicht definiert. Wir konnten versuchen < /p>
[code]class AbstractClass:
class ClassEnum(Enum):
raise NotImplementedError
def run(self):
...
[/code]
Aber dies wirft vorhersehbar einen Fehler auf, sobald die AbstractClass definiert istclass AbstractClass:
@property
def ClassEnum(self):
raise NotImplementedError
def run(self):
...
< /code>
Aber hier ist nicht klar, dass im Unterklassen CascasSenum tatsächlich eine Klasse sein sollte. Perhpas Dieser Ansatz mit einer gewissen Dokumentation könnte angemessen sein.