Создание объекта с новым объектом {} [дубликат]

class First(object):
  def __init__(self, a):
    print "first", a
    super(First, self).__init__(20)

class Second(object):
  def __init__(self, a):
    print "second", a
    super(Second, self).__init__()

class Third(First, Second):
  def __init__(self):
    super(Third, self).__init__(10)
    print "that's it"

t = Third()

Выход -

first 10
second 20
that's it

Call to Third () определяет init, определенный в третьем. И вызов super в этой процедуре вызывает init, определенный в First. MRO = [Первый, Второй]. Теперь вызов super в init, определенный в First, продолжит поиск MRO и найдет init, определенный во втором, и любой вызов super ударит объект init по умолчанию. Надеюсь, этот пример прояснит концепцию.

Если вы не называете super от First. Цепь останавливается, и вы получите следующий результат.

first 10
that's it
-1
задан Ivar 5 March 2019 в 08:12
поделиться

1 ответ

Класс newObj является анонимным внутренним классом. Здесь вы определяете этот анонимный внутренний класс внутри фигурной скобки {}.

Анонимный внутренний класс может быть полезен при создании экземпляра объекта с некоторыми «дополнительными функциями», такими как методы перегрузки класса или интерфейса, без необходимости фактически создавать подкласс класса.

Кроме того, ссылка newObj относится не к экземпляру Object, а к экземпляру анонимного подкласса Object.

0
ответ дан user207421 5 March 2019 в 08:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: