Как правильно реализовать абстрактную переменную в классе в Python 3? - PullRequest
0 голосов
/ 19 марта 2019

Я видел несколько разных способов реализации абстрактных методов, таких как:

Первый метод: импорт ABC

from abc import ABC

class X(ABC):
    @abstractmethod
    def abstractmethod(self):
        pass

Второй метод: повышениеNotImplementedError

class X:
    def abstractmethod(self):
        raise NotImplementedError

Я хочу знать две разные вещи.

1) Какой самый приемлемый способ обработки абстракции в Python ?;и

2) Как мне подойти к этому для переменных?

1 Ответ

1 голос
/ 19 марта 2019

Я думаю, что в основном все сводится к предпочтениям, но из того кода, который я видел, ABC более приемлем, поскольку он предлагает дополнительную гарантию безопасности, не позволяя создавать экземпляры любого класса, который включает методы, помеченные как абстрактные с помощьюдекоратор @abstractmethod.

Для переменных вы можете использовать декоратор @property поверх @abstractmethod, например

from abc import ABC, abstractmethod


class Test(ABC):
    @property
    @abstractmethod
    def test(self):
        pass


class TestImpl(Test):
    @property
    def test(self):
        return 1


Test()  # TypeError: Can't instantiate abstract class Test with abstract methods test
TestImpl().test  # 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...