Dans le code suivant, je crée une classe abstraite de base Base. Je veux que toutes les classes qui héritent de Basepour fournir la namepropriété, j'ai donc fait de cette propriété un @abstractmethod.
Ensuite, j'ai créé une sous-classe de Base, appelée Base_1, qui est censée fournir des fonctionnalités, mais reste abstraite. Il n'y a pas de namepropriété dans Base_1, mais néanmoins python instaure un objet de cette classe sans erreur. Comment créer des propriétés abstraites?
from abc import ABCMeta, abstractmethod
class Base(object):
__metaclass__ = ABCMeta
def __init__(self, strDirConfig):
self.strDirConfig = strDirConfig
@abstractmethod
def _doStuff(self, signals):
pass
@property
@abstractmethod
def name(self):
#this property will be supplied by the inheriting classes
#individually
pass
class Base_1(Base):
__metaclass__ = ABCMeta
# this class does not provide the name property, should raise an error
def __init__(self, strDirConfig):
super(Base_1, self).__init__(strDirConfig)
def _doStuff(self, signals):
print 'Base_1 does stuff'
class C(Base_1):
@property
def name(self):
return 'class C'
if __name__ == '__main__':
b1 = Base_1('abc')
@propertydansclass C,namereviendra à une méthode.