Мой коллега написал код, аналогичный следующему сегодня, попросил меня взглянуть, и мне потребовалось некоторое время, чтобы обнаружить ошибку:
class A():
def __init__(self):
print('A')
class B(A):
def __init__(self):
super(B).__init__()
b = B()
Проблема здесь в том, что нет параметра self
для super()
в конструкторе B
. Меня удивило то, что в этом случае абсолютно ничего не происходит, т.е. Нет ошибки, ничего. Что содержит объект super
, созданный super(B)
? Как объект, он явно имеет конструктор, так что то, что вызывается, но как этот объект связан с B
? В частности, почему этот допустимый код и где-то не выбрасывает исключение? Является ли super(B)
объектом с некоторым фактическим использованием и что это будет?