问题
What's a good way to implement something similar to a Delphi/C# interface or abstract class in Python? A class that will force all its subclasses to implement a particular set of methods?
回答1:
The simplest way to do this is to use the abstract base class implementation that has been included in Python since version 2.7.
This lets you mark a base class as abstract by using the abc.ABCMeta metaclass. You may then mark methods and properties as abstract. When you instantiate a class with the ABCMeta metaclass (or any of its subclasses) an exception will be thrown if any abstract properties or methods remain undefined in the instance.
e.g.
>>> from abc import ABCMeta, abstractmethod
>>> class Foo(object):
__metaclass__ = ABCMeta
@abstractmethod
def bar(self): pass
>>> class BadFoo(Foo):
pass
>>> BadFoo()
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
BadFoo()
TypeError: Can't instantiate abstract class BadFoo with abstract methods bar
>>> class GoodFoo(Foo):
def bar(self):
return 42
>>> GoodFoo()
<__main__.GoodFoo object at 0x027354B0>
>>>
The check is done only when the class is instantiated because it is perfectly legitimate to have a subclass that only implements some of the abstract methods and is therefore itself an abstract class.
来源:https://stackoverflow.com/questions/14195075/whats-a-good-way-to-implement-something-similar-to-an-interface-in-python