У меня есть класс диагностики c (технически @dataclass
написано в python). В классе Diagnosti c в настоящее время есть метод класса, соответствующий «уровню» сообщения Diagnosti c (информация ie, предупреждение, ошибка). У него также есть перечисление, Level:
@dataclass
class Diagnostic:
#instance variables bc dataclass
severity: Level
message: str
start: Tuple[int, int]
end: Tuple[int, int]
class Level(enum.IntEnum):
info = 0
error = 1
warning = 2
#....
@classmethod
def create(...)
#....
@classmethod
def info(...)
#....
@classmethod
def warning(...)
#....
@classmethod
def error(...)
#....
Я бы хотел изменить это так, чтобы каждое сообщение о диагностике c имело свой собственный класс. До сих пор я придумал это иерархия, где Diagnostic_Error
, Diagnostic_Info
и Diagnostic_Warning
являются дочерними элементами Diagnostic
класса (который больше не является dataclass
):
class Diagnostic:
# instance properties
__slots__ = ("message", "start", "end")
def __init__(
self, message: str, start: Tuple[int, int], end: Tuple[int, int]
) -> None:
self.message = message
self.start = start
self.end = end
class Level(enum.IntEnum):
info = 0
error = 1
warning = 2
# but do we still need this?
@classmethod
def from_docutils(cls, docutils_level: int) -> "Diagnostic.Level":
level = docutils_level - 1
level = min(level, cls.warning)
level = max(level, cls.info)
return cls(level)
class Diagnostic_Info(Diagnostic):
severity: Diagnostic.Level = Level.info
class Diagnostic_Warning(Diagnostic):
severity: Diagnostic.Level = Level.warning
class Diagnostic_Error(Diagnostic):
severity: Diagnostic.Level = Level.error
Однако я получаю Name 'Level' is not defined
,
Как получить доступ к перечислению родителей из дочернего класса? В таком случае, как мне получить доступ к Level из Diagnostic_Error, Diagnostic_Info и Diagnostic_Warning?