我的Python應用程序包含許多抽象類和實現。例如:確定Python類是否爲Abstract Base Class或具體
import abc
import datetime
class MessageDisplay(object):
__metaclass__ = abc.ABCMeta
@abc.abstractproperty
def display(self, message):
pass
class FriendlyMessageDisplay(MessageDisplay):
def greet(self):
hour = datetime.datetime.now().timetuple().tm_hour
if hour < 7:
raise Exception("Cannot greet while asleep.")
elif hour < 12:
self.display("Good morning!")
elif hour < 18:
self.display("Good afternoon!")
elif hour < 20:
self.display("Good evening!")
else:
self.display("Good night.")
class FriendlyMessagePrinter(FriendlyMessageDisplay):
def display(self, message):
print(message)
FriendlyMessagePrinter
是一個具體的類,我們可以使用...
FriendlyMessagePrinter().greet()
Good night.
...但MessageDisplay
和FriendlyMessageDisplay
是抽象類,並試圖實例化一個會導致一個錯誤:
TypeError: Can't instantiate abstract class MessageDisplay with abstract methods say
如何檢查是否a給定的類對象是一個(不可證實的)抽象類?
Ref。對於偶然的讀者,ABC:http://docs.python.org/2/library/abc.html – 2013-01-19 05:17:02