小编Lap*_*not的帖子

抽象属性(不是属性)?

定义抽象实例属性的最佳实践是什么,而不是属性?

我想写一些类似的东西:

class AbstractFoo(metaclass=ABCMeta):

    @property
    @abstractmethod
    def bar(self):
        pass

class Foo(AbstractFoo):

    def __init__(self):
        self.bar = 3
Run Code Online (Sandbox Code Playgroud)

代替:

class Foo(AbstractFoo):

    def __init__(self):
        self._bar = 3

    @property
    def bar(self):
        return self._bar

    @bar.setter
    def setbar(self, bar):
        self._bar = bar

    @bar.deleter
    def delbar(self):
        del self._bar
Run Code Online (Sandbox Code Playgroud)

属性很方便,但对于不需要计算的简单属性,它们是一种过度杀伤.这对于将由用户进行子类化和实现的抽象类尤其重要(我不想强迫某人@property在他刚写入self.foo = foo时使用__init__).

Python问题中的抽象属性建议仅作为使用的答案,@property并且@abstractmethod:它不回答我的问题.

抽象类属性的ActiveState配方AbstractAttribute可能是正确的方法,但我不确定.它也只适用于类属性而不适用于实例属性.

python abstract

56
推荐指数
5
解决办法
2万
查看次数

标签 统计

abstract ×1

python ×1