An abstract class can be considered as a blueprint for other classes. It allows you to create a set of methods that must be created within any child classes built from the abstract class. A class which contains one or more abstract methods is called an abstract class. An abstract method is a method that has a declaration but does not have an implementation. While we are designing large functional units we use an abstract class. When we want to provide a common interface for different implementations of a component, we use an abstract class.
Why use Abstract Base Classes :
By defining an abstract base class, you can define a common Application Program Interface(API) for a set of subclasses. This capability is especially useful in situations where a third-party is going to provide implementations, such as with plugins, but can also help you when working in a large team or with a large code-base where keeping all classes in your mind is difficult or not possible.
How Abstract Base classes work :
By default, Python does not provide abstract classes. Python comes with a module which provides the base for defining Abstract Base classes(ABC) and that module name is
ABC. ABC works by decorating methods of the base class as abstract and then registering concrete classes as implementations of the abstract base. A method becomes abstract when decorated with the keyword
@abstractmethod. For Example –
I have 3 sides I have 4 sides I have 5 sides I have 6 sides
I can walk and run I can crawl I can bark I can roar
Implementation Through Subclassing :
By subclassing directly from the base, we can avoid the need to register the class explicitly. In this case, the Python class management is used to recognize
PluginImplementation as implementing the abstract
A side-effect of using direct subclassing is, it is possible to find all of the implementations of your plugin by asking the base class for the list of known classes derived from it.
Concrete Methods in Abstract Base Classes :
Concrete classes contain only concrete (normal)methods whereas abstract classes may contains both concrete methods and abstract methods. Concrete class provide an implementation of abstract methods, the abstract base class can also provide an implementation by invoking the methods via
Let look over the example to invoke the method using super():
Abstract Base Class subclass
In the above program, we can invoke the methods in abstract classes by using
Abstract Properties :
Abstract classes includes attributes in addition to methods, you can require the attributes in concrete classes by defining them with @abstractproperty.
Can't instantiate abstract class parent with abstract methods geeks child class
In the above example, the Base class cannot be instantiated because it has only an abstract version of the property getter method.
Abstract Class Instantiation :
Abstract classes are incomplete because they have methods which have no body. If python allows creating an object for abstract classes then using that object if anyone calls the abstract method, but there is no actual implementation to invoke. So we use an abstract class as a template and according to the need we extend it and build on it before we can use it. Due to the fact, an abstract class is not a concrete class, it cannot be instantiated. When we create an object for the abstract class it raises an error.
Traceback (most recent call last): File "/home/ffe4267d930f204512b7f501bb1bc489.py", line 19, in c=Animal() TypeError: Can't instantiate abstract class Animal with abstract methods move
- C# | Abstract Classes
- Messages, aggregation and abstract classes in OOPS
- Abstract Factory Method - Python Design Patterns
- Python Classes and Objects
- Create Classes Dynamically in Python
- Data Classes in Python | An Introduction
- Data Classes in Python | Set 4 (Inheritance)
- Data Classes in Python | Set 5 (post-init)
- Data Classes in Python | Set 6 (interconversion to and from other datatypes)
- Data Classes in Python | Set 3 (dataclass fields)
- Data Classes in Python | Set 2 (Decorator Parameters)
- How to Dynamically Load Modules or Classes in Python
- Scala | Abstract Type members
- Abstract Methods in Java with Examples
- Why does PHP 5.2+ disallow abstract static class methods ?
- PyQt5 QCalendarWidget - Setting Border to the Abstract View
- PyQt5 QCalendarWidget - Background Color to the Abstract View
- ES6 | Classes
- Perl | Classes in OOP
- Classes in R Programming
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : OmriLevin