抽象类中, 可以包括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)