Я думаю, что в основном все сводится к предпочтениям, но из того кода, который я видел, 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