在Python 3中的类中实现抽象变量的正确方法是什么?

时间:2019-03-19 17:21:22

标签: python-3.x class oop

我已经看到了一些实现抽象方法的不同方法,例如:

第一种方法:导入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 个答案:

答案 0 :(得分:1)

我认为,这主要取决于偏好,但是从我所看到的代码来看,ABC方式被更广泛地接受,因为它提供了额外的安全保证,即不会让您实例化任何类,该类包含带有以下标记为abstract的方法@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