在Python 3.4+中,我们可以做到
class Foo(abc.ABC):
...
或者我们可以
class Foo(metaclass=abc.ABCMeta):
...
我应该注意到这两者之间有什么不同吗?
发布于 2015-10-25 21:08:11
abc.ABC
基本上只是metaclass=abc.ABCMeta
之上的一个额外层。即abc.ABC
含蓄地为我们定义了元类。
(资料来源:https://hg.python.org/cpython/file/3.4/Lib/abc.py#l234)
class ABC(metaclass=ABCMeta):
"""Helper class that provides a standard way to create an ABC using
inheritance.
"""
pass
唯一的区别是,在前一种情况下,您需要简单的继承,而在后一种情况下,您需要指定元类。
来自Python3.4的新特性(重点雷):
新类
ABC
将ABCMeta
作为其元类。使用ABC
作为基类在本质上与指定metaclass=abc.ABCMeta
、具有相同的效果,但更易于键入,更易于阅读。
相关问题: __metaclass__
https://stackoverflow.com/questions/33335005
复制相似问题