Если я хочу убедиться, что в подклассе есть определенный метод, я бы реализовал интерфейс в суперклассе. Для этого я бы использовал модуль ab c и заставил мой суперкласс наследовать от ab c .AB C. Затем я использовал бы декоратор @abstractmethod, чтобы убедиться, что определенный метод должен быть перезаписан в моих подклассах.
На этом этапе я хотел убедиться, что один из методов должен быть свойством. Я попытался использовать оба декоратора для достижения этой цели, но обнаружил, что не было никакой разницы при перезаписи этого определенного метода суперкласса в подклассе.
Поэтому мой вопрос будет таким: какая разница между:
import abc
class superclass1(abc.ABC):
@property
@abc.abstractmethod
def foo(self):
pass
class subclass1(superclass1):
def foo(self):
return "bar"
class superclass2(abc.ABC):
@abc.abstractmethod
def foo(self):
pass
class subclass2(superclass2):
def foo(self):
return "bar"
class superclass3(abc.ABC):
@property
@abc.abstractmethod
def foo(self):
pass
class subclass3(superclass3):
@property
def foo(self):
return "bar"
class superclass4(abc.ABC):
@abc.abstractmethod
def foo(self):
pass
class subclass4(superclass4):
@property
def foo(self):
return "bar"