【发布时间】:2018-12-05 22:25:33
【问题描述】:
有没有办法在python中为类声明一个抽象实例变量?
例如,我们有一个抽象基类Bird,使用abc 包实现抽象方法fly,抽象实例变量feathers(我正在寻找)实现为一个属性。
from abc import ABCMeta, abstractmethod
class Bird(metaclass=ABCMeta):
@property
@abstractmethod
def feathers(self):
"""The bird's feathers."""
@abstractmethod
def fly(self):
"""Take flight."""
问题是Eagle 是从Bird 派生的类,需要将feathers 实现为属性方法。所以以下不是可接受的课程,但我希望它是
class Eagle(Bird):
def __init__(self):
self.feathers = 'quill'
def fly(self):
print('boy are my arms tired')
可能存在问题,因为要求是在实例本身上,并且实际上是在实例化之后,所以我不知道像 abc 包这样的东西是否仍然有效。
有一些标准的处理方法吗?
【问题讨论】:
-
也许我没抓住重点。您能简要解释一下为什么需要抽象属性吗?否则就让它成为一个正常的属性。
-
我希望它被强制执行,这样如果 Eagle 实例没有
feathers属性,就会引发一个有用的错误(以避免不可预测的行为)。 (如果您的意思更具体,对不起,但很难回答,因为我希望将它用于几个不同的变量。)
标签: python abstract-class python-3.6 instance-variables