Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No error while instantiating abstract class, even though abstract method is not implemented

I was trying out the below python code:

from abc import ABCMeta, abstractmethod

class Bar:

    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass


class Bar2(Bar):
    def foo2(self):
        print("Foo2")


b = Bar()
b2 = Bar2()

I thought having @abstractmethod will ensure that my parent class will be abstract and the child class would also be abstract as it is not implementing the abstract method. But here, I get no error trying to instantiate both the classes.

Can anyone explain why?

like image 569
codingsplash Avatar asked Mar 17 '23 22:03

codingsplash


1 Answers

You must set meta-class of Bar class to ABCMeta.

Python 2:

class Bar:
    __metaclass__ = ABCMeta

    @abstractmethod
    def foo(self):
        pass

Python 3:

class Bar(object, metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
like image 122
M.javid Avatar answered Apr 08 '23 04:04

M.javid