What's a good way to implement something similar to an interface in Python?

北战南征 提交于 2019-12-12 09:59:47

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!