Как обеспечить соблюдение этого подкласса абстрактного класса, должен определить конкретный внутренний класс в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как обеспечить соблюдение этого подкласса абстрактного класса, должен определить конкретный внутренний класс в Python

Сообщение Anonymous »

У меня есть абстрактный класс, из которого будут происходить подклассы. Бетонные реализации должны включать в них класс Enum, который содержит набор именованных констант. < /P>

Код: Выделить всё

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)
На самом деле этот код дает правильное поведение, однако я хотел бы, чтобы было какое -то нотацию (аналогично NotimplementedError в абстрактном Speak () Метод), который указывает, что автор бетонного класса должен определить внутренний переход класс с именем classenum . На самом деле необходимо для метода run () .
Некоторые идеи должны иметь что -то вроде

Код: Выделить всё

class AbstractClass:
class ClassEnum(Enum):
pass

def run(self):
...
Но это не вынесет ошибку, если подкласс не определит свою собственную версию Classenum . Мы могли бы попробовать < /p>

Код: Выделить всё

class AbstractClass:
class ClassEnum(Enum):
raise NotImplementedError

def run(self):
...
Но это предсказуемо вызывает ошибку, как только AbstractClass определяется
Я мог бы попробовать
class AbstractClass:
@property
def ClassEnum(self):
raise NotImplementedError

def run(self):
...
< /code>
Но здесь неясно, что в классе подкласса на самом деле должен быть класс. Perhpas этот подход с некоторой документацией может быть подходящим ..

Подробнее здесь: https://stackoverflow.com/questions/643 ... ular-inner
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»