Is there any difference between using ABC vs ABCMeta?
PythonPython 3.xPython Problem Overview
In Python 3.4+, we can do
class Foo(abc.ABC):
...
or we can do
class Foo(metaclass=abc.ABCMeta):
...
Are there any differences between the two that I should be aware of?
Python Solutions
Solution 1 - Python
abc.ABC
basically just an extra layer over metaclass=abc.ABCMeta
. i.e abc.ABC
implicitly defines the metaclass for us.
(Source: 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
The only difference is that in the former case you need a simple inheritance and in the latter you need to specify the metaclass.
From What's new in Python 3.4(emphasis mine):
> New class ABC
has ABCMeta
as its meta class. Using ABC
as a base
> class has essentially the same effect as specifying
> metaclass=abc.ABCMeta
, but is simpler to type and easier to read.
Related issue: Create abstract base classes by inheritance rather than a direct invocation of __metaclass__