Пробовал ответ от принудительной реализации конкретных атрибутов в подклассе
Но не работает. Этот код по-прежнему проходит без ошибок.
#python version: 3.8.1
from abc import ABC, abstractmethod
class A(ABC):
@property
@abstractmethod
def pr(self):
return 0
class B(A):
def pr(self):# not a property.
return 5
b = B()
print(b.pr())
Итак, как я могу заставить подклассы реализовать определенные свойства (pr, как указано выше)?
Код проходит без ошибок, потому что вы дали конкретную реализацию для абстрактного метода в подклассе, и похоже (не уверен), что это единственное, что заботит abc
. Кроме того, если вы переопределяете, невозможно автоматически применить те же декораторы из родительского класса, вам придется повторить синтаксис декоратора свойств.
Лучшие темы, которые я нашел об этом, это это и это. Пожалуйста, прочитайте их полностью.
Кроме того, есть недавняя ошибка Python , которая выглядит закрытой без решения (или она снова открыта?). Там же прочитайте полную ветку. Интересно и по теме.