<p>“抽象基类”或<code>abc.ABC</code>是一个辅助类</p>
<p><a href="https://docs.python.org/3/library/abc.html" rel="nofollow noreferrer">https://docs.python.org/3/library/abc.html</a></p>
<p>以下是它们存在的原因:</p>
<blockquote>
<p>The collections module has some concrete classes that derive from ABCs; these can, of course, be further derived. In addition, the <code>collections.abc</code> submodule has some ABCs that can be used to test whether a class or instance provides a particular interface, for example, if it is hashable or if it is a mapping.</p>
</blockquote>
<p>这里有一个很好的例子:<a href="https://pymotw.com/2/abc/" rel="nofollow noreferrer">https://pymotw.com/2/abc/</a><a href="https://pymotw.com/3/abc/" rel="nofollow noreferrer">https://pymotw.com/3/abc/</a></p>
<p>来自pymotw:</p>
<p>忘记正确设置元类意味着具体实现没有强制实施API。为了更容易正确设置抽象类,提供了一个自动设置元类的基类</p>
<pre><code>abc_abc_base.py
import abc
class PluginBase(abc.ABC):
@abc.abstractmethod
def load(self, input):
"""Retrieve data from the input source
and return an object.
"""
@abc.abstractmethod
def save(self, output, data):
"""Save the data object to the output."""
class SubclassImplementation(PluginBase):
def load(self, input):
return input.read()
def save(self, output, data):
return output.write(data)
if __name__ == '__main__':
print('Subclass:', issubclass(SubclassImplementation,
PluginBase))
print('Instance:', isinstance(SubclassImplementation(),
PluginBase))
</code></pre>