ITEEDU

abstract property

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