有没有办法在python中为类声明抽象实例变量?
例如,我们有一个抽象基类,Bird带有fly使用abc包实现的抽象方法,以及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."""
Run Code Online (Sandbox Code Playgroud)
问题是,Eagle从 派生的类Bird需要feathers实现为属性方法。所以以下不是一个可以接受的类,但我希望它是
class Eagle(Bird):
def __init__(self):
self.feathers = 'quill'
def fly(self):
print('boy are my arms tired')
Run Code Online (Sandbox Code Playgroud)
可能存在问题,因为需求是在实例本身上,并且确实在实例化之后,所以我不知道像abc包这样的东西是否仍然有效。
有没有一些标准的方法来处理这个问题?
try如果条件为真,我想加载文件.如果发生文件异常或条件为假,我想要执行第二行(一行)代码.
为了涉及鸟类,请考虑以下代码:
if try_to_fly:
try:
fly()
except FlyError:
walk("I'm walking instead of flying.")
else:
walk("I'm walking stead of flying.")
# more lines below #
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的.但是,它有walk("I'm walking stead of flying.")两次,这是很好的避免.
此外,还有更多的代码要做到这一点,因此我们不能return在没有考虑该代码的情况下使用try语句.
是否有更多的pythonic方式来做到这一点?