使用ABC和ABCMeta之间有什么区别吗?

时间:2015-10-25 20:57:37

标签: python python-3.x

在Python 3.4+中,我们可以做到

class Foo(abc.ABC):
    ...

或者我们可以做

class Foo(metaclass=abc.ABCMeta):
    ...

我应该注意两者之间有什么不同吗?

1 个答案:

答案 0 :(得分:23)

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

唯一的区别是,在前一种情况下,您需要一个简单的继承,在后一种情况下,您需要指定元类。

来自What's new in Python 3.4(强调我的):

  

新课程ABC已将ABCMeta作为其元类。使用ABC作为基础   class与指定具有基本相同的效果   metaclass=abc.ABCMeta但输入更简单,更易于阅读

相关问题: Create abstract base classes by inheritance rather than a direct invocation of __metaclass__