@property и @abstractmethod vs @abstractmethod одни в суперклассе - какая разница? Python 3 - PullRequest
0 голосов
/ 27 января 2020

Если я хочу убедиться, что в подклассе есть определенный метод, я бы реализовал интерфейс в суперклассе. Для этого я бы использовал модуль 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"
...