Есть ли способ объявить абстрактную переменную экземпляра для класса в 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."""
Проблема в том, что Eagle
, класс, производный от Bird
, должен иметь feathers
, реализованный как метод свойства. Поэтому следующий класс не является приемлемым, но я бы хотел, чтобы он был
class Eagle(Bird):
def __init__(self):
self.feathers = 'quill'
def fly(self):
print('boy are my arms tired')
Может возникнуть проблема, поскольку требование касается самого экземпляра и действительно после его создания, поэтому я не знаю, будут ли работать такие вещи, как пакет abc
.
Существуют ли стандартные способы справиться с этим?