Python

[Python] Abstract Class

llHoYall 2020. 9. 28. 20:58

The abstract class is the class that has only method lists.
The abstract class can't make an instance.
The inherited class must implement all abstract methods.

Import a Module

from abc import ABCMeta

ABCMeta (Abstract Base Class) forces a derived class to implement a specific method of the base class.

Abstract Class Declaration

class AbstractClass(metaclass=ABCMeta):
    pass

You can declare the abstract class through the above way.

 

Let's declare the abstract class with some methods.

from abc import ABCMeta, abstractmethod

class AbstractClass(metaclass=ABCMeta):
    @abstractmethod
    def abstract_method1(self):
        pass

    @abstractmethod
    def abstract_method2(self):
        pass

Let's try to create an instance.

obj = AbstractClass()

# Traceback (most recent call last):
#   File "main.py", line 17, in <module>
#     obj = AbstractClass()
# TypeError: Can't instantiate abstract class AbstractClass with abstract methods abstract_method1, abstract_method2

As I said, the abstract class can't make an instance.

Abstract Class Inheritance

Create a child class inherited from the abstract class.

class ChildClass(AbstractClass):
    def abstract_method1(self):
        print("abstract method 1")

obj = ChildClass()

# Traceback (most recent call last):
#   File "main.py", line 23, in <module>
#     obj = ChildClass()
# TypeError: Can't instantiate abstract class ChildClass with abstract methods abstract_method2

As I also said, the inherited class has to implement all abstract methods.

 

This is the full source code for the abstract class example.

from abc import ABCMeta, abstractmethod

class AbstractClass(metaclass=ABCMeta):
    @abstractmethod
    def abstract_method1(self):
        pass

    @abstractmethod
    def abstract_method2(self):
        pass
        
class ChildClass(AbstractClass):
    def abstract_method1(self):
        print("abstract method 1")
        
    def abstract_method2(self):
        print("abstract method 2")

obj = ChildClass()
obj.abstract_method1()
obj.abstract_method2()

# abstract method 1
# abstract method 2
반응형