I am trying to declare an abstract class A with a constructor with a default behavior: all subclasses must initialize a member self.n:
You can override __new__ method to prevent direct instantiation.
class A(object):
__metaclass__ = ABCMeta
def __new__(cls, *args, **kwargs):
if cls is A:
raise TypeError(
"TypeError: Can't instantiate abstract class {name} directly".format(name=cls.__name__)
)
return object.__new__(cls)
Output:
>>> A()
Traceback (most recent call last):
File "", line 1, in
A()
File "/Users/ashwini/py/so.py", line 11, in __new__
"TypeError: Can't instantiate abstract class {name} directly".format(name=cls.__name__)
TypeError: TypeError: Can't instantiate abstract class A directly