Python:抽象实例变量?

标签 python abstract-class python-3.6 instance-variables

有没有办法在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."""

问题是 EagleBird 的派生类,需要将 feathers 实现为属性方法。所以下面不是一个可接受的类,但我希望它是

class Eagle(Bird):

    def __init__(self):
        self.feathers = 'quill'

    def fly(self):
        print('boy are my arms tired')

这可能是一个问题,因为需求是针对实例本身的,而且实际上是在实例化之后,所以我不知道像 abc 包这样的东西是否仍然有效。

是否有一些标准的方法来处理这个问题?

最佳答案

abc 系统不包含声明抽象实例变量的方法。确定类是具体类还是抽象类的代码必须在任何实例存在之前运行;它可以很容易地检查一个类的方法和属性,但它无法判断实例是否具有任何特定的实例属性。

最接近的可能是变量注解:

class Bird(metaclass=ABCMeta):
    feathers : str
    ...

abc 不会对该注解做任何事情,但它至少向读者和静态类型检查器表明 Bird 的实例应该有一个 feathers 实例变量。 (静态类型检查器是否会理解这个实例变量应该来自子类,我不知道。)

关于Python:抽象实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51055750/

相关文章:

python - 在 py2exe 编译中包含 .pyd 模块文件

c++ - 来自抽象类的新派生类

c# - 在 Inherited Class Constructor C# 中强制部分基初始化(和方法)(就像抽象对方法所做的那样)——解决这个问题

带有 curses 提示的 Python 类型

Python 3.6 - 从文件中读取编码文本并转换为字符串

python - 在多线程 Python 应用程序中最小化 MySQL 连接开销的正确方法是什么?

python - 如何在Python gammu中使用setup.py

python - 成员变量的注解在哪里

python - 如何在 Python3 中使用不同种类的排列?

java - 我如何处理 Undertow 中的 HTTP 方法?