抽象类中, 可以包括abstract property, 和property一样, 也可以使用两种方式来定义抽象属性, 使用abstractproperty()或@abstractproperty。
使用abstractproperty():
from abc import ABCMeta from abc import abstractproperty from abc import abstractmethod class IMediaPlayer_1: """API for accessing a media player""" __metaclass__ = ABCMeta def get_volume(self): pass def set_volume(self, value): pass volume = abstractproperty(get_volume, set_volume,doc="Return or set volume: 0..100") class WinMediaPlay_1(IMediaPlayer_1): def __init__(self): self._volume=0 def get_volume(self): return self._volume def set_volume(self, value): self._volume=value volume = property(get_volume, set_volume,doc="Return or set volume: 0..100") player1=WinMediaPlay_1() player1.volume=10 print(player1.volume)
使用@abstractproperty:
from abc import ABCMeta from abc import abstractproperty from abc import abstractmethod class IMediaPlayer_2: """API for accessing a media player""" __metaclass__ = ABCMeta @abstractproperty def price(self): """I'm the 'x' property.""" pass @price.setter def price(self, value): pass class WinMediaPlay_2(IMediaPlayer_2): def __init__(self): self._price=0 @property def price(self): """I'm the 'x' property.""" return self._price @price.setter def price(self, value): self._price=value player2=WinMediaPlay_2() player2.price=20 print(player2.price)