Advanced Lesson 2
Advanced Object-Oriented Programming
Chapter 2: Polymorphism
Abstract decorator
In our previous code, a problem is that a user can still create a new instance of the Device
class via device = Device()
. The NotImplementedError
exception is only raised when device.turn_off()
is invoked.
Perhaps a better way is to not allow instances of Device()
to be created in the first place!
To do this, you explicitly turn Device
into an abstract class, by subclassing from abc.ABC
(Abstract Base Class).
You will also explicitly mark turn_off()
as an abstract method using the @abstractmethod
decorator. We will talk about decorators in more detail in a future lesson. There is no need to raise a NotImplementedError
as before either. A simple pass
statement is sufficient.
1 2 3 4 5 6 7 8 9 10 11 |
|
If you run the code above, you will get a TypeError: Can't instantiate abstract class Device with abstract methods turn_off
. The error message should be clear if you have understood everything correctly! You cannot create an instance of something that is abstract!
This is actually the recommended way to create an abstract class/method.