Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any difference between using ABC vs ABCMeta?

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?

like image 487
walrus Avatar asked Oct 25 '15 20:10

walrus


People also ask

What is ABCMeta class?

ABCMeta metaclass provides a method called register method that can be invoked by its instance. By using this register method, any abstract base class can become an ancestor of any arbitrary concrete class.

What is Python ABC module?

The 'abc' module in Python library provides the infrastructure for defining custom abstract base classes. 'abc' works by marking methods of the base class as abstract. This is done by @absttractmethod decorator.


1 Answers

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__

like image 108
Ashwini Chaudhary Avatar answered Sep 20 '22 18:09

Ashwini Chaudhary