Он вызывает конструктор другого класса сам по себе.
Это забавная особенность объектно-ориентированного дизайна python. «Методы экземпляра» - это на самом деле просто методы класса, которые принимают текущий экземпляр в качестве неявного параметра. Фактически вы можете вызывать их как методы класса и явно предоставлять объект:
ex = [1, 2, 3, 4, 5]
# the following are equivalent:
ex.pop(0) # call the method on the instance, passing it implicitly
list.pop(ex, 0) # call the method on the class `list`, passing the instance explicitly
Здесь используется то же поведение. Вы берете метод __init__
класса tk.TK
и передаете self
в качестве "экземпляра". Это необычный, но действительный способ доступа к методам в суперклассе, которые были переопределены в вашем подклассе (например, в конструкторе).
Как и в ответе @ Barmar, лучшим решением является использование super()
, которое производит нечто, напоминающее экземпляр суперкласса, который вы затем вызываете __init__
для получения реализации __init__()
передачи суперкласса self
неявно, как и следовало ожидать.