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
Класс newObj
является анонимным внутренним классом. Здесь вы определяете этот анонимный внутренний класс внутри фигурной скобки {}
.
Анонимный внутренний класс может быть полезен при создании экземпляра объекта с некоторыми «дополнительными функциями», такими как методы перегрузки класса или интерфейса, без необходимости фактически создавать подкласс класса.
blockquote>Кроме того, ссылка
newObj
относится не к экземпляруObject
, а к экземпляру анонимного подклассаObject
.