Conheço duas maneiras de chamar o construtor de uma superclasse a partir de uma classe derivada: super().__init__()
e base.__init__(self)
. Por que a segunda exige que eu forneça explicitamente self
como argumento?
Aqui está um trecho que demonstra a diferença:
class base:
def __init__(self,/):
print("initializing")
class der(base):
def __init__(self):
super().__init__() #no error
base.__init__(self) #no error
base.__init__() #error, self required
obj = der()
A terceira chamada do construtor gera este erro:
File "demo.py", line 11, in <module>
obj = der()
^^^^^
File "demo.py", line 9, in __init__
base.__init__() #error, should be: base.__init__(self)
^^^^^^^^^^^^^^^
TypeError: base.__init__() missing 1 required positional argument: 'self'
Espero base.__init__()
que funcione, pois super().__init__()
não requer um explícito self
.