Instantiating abstract classes

Peter Otten __peter__ at web.de
Fri May 21 14:00:23 EDT 2021


Usually an abstract class cannot be instantiated:

 >>> from abc import ABCMeta, abstractmethod
 >>> from fractions import Fraction
 >>> class A(Fraction, metaclass=ABCMeta):
	@abstractmethod
	def frobnicate(self): pass

	
 >>> A()
Traceback (most recent call last):
   File "<pyshell#287>", line 1, in <module>
     A()
   File "C:\Program Files\Python39-32\lib\fractions.py", line 93, in __new__
     self = super(Fraction, cls).__new__(cls)
TypeError: Can't instantiate abstract class A with abstract method 
frobnicate


However, if I derive from a builtin class that mechanism doesn't work:

 >>> class A(int, metaclass=ABCMeta):
	@abstractmethod
	def frobnicate(self): pass

	
 >>> A()
0

Is this a bug, or an implementation accident, or the expected behavior?



More information about the Python-list mailing list