Переопределение метода Python — более конкретные аргументы в производном классе, чем в базовом классеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Переопределение метода Python — более конкретные аргументы в производном классе, чем в базовом классе

Сообщение Anonymous »

Предположим, я хочу создать абстрактный базовый класс под названием Document. Я хочу, чтобы средство проверки типов гарантировало, что все его подклассы реализуют метод класса from_paragraphs, который создает документ из последовательности объектов Paragraph. Однако LegalDocument должен быть создан только из объектов LegalParagraph, а AcademicDocument - только из объектов AcademicParagraph.
Мой инстинкт сделать это так:

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

from abc import ABC, abstractmethod
from typing import Sequence

class Document(ABC):
@classmethod
@abstractmethod
def from_paragraphs(cls, paragraphs: Sequence["Paragraph"]):
pass

class LegalDocument(Document):
@classmethod
def from_paragraphs(cls, paragraphs: Sequence["LegalParagraph"]):
return  # some logic here...

class AcademicDocument(Document):
@classmethod
def from_paragraphs(cls, paragraphs: Sequence["AcademicParagraph"]):
return  # some logic here...

class Paragraph:
text: str

class LegalParagraph(Paragraph):
pass

class AcademicParagraph(Paragraph):
pass
Однако Пайрайт жалуется на это, поскольку from_paragraphs в производных классах нарушает принцип подстановки Лискова. Как убедиться, что каждый производный класс реализует from_paragraphs для некоторого типа Paragraph?


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

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

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

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

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

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

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