[Python путь Ролло] объектно-ориентированное исследование отмечает (б) Наследование Наследование

Три характеристики мишени для двух: Inheritance (наследование)

Python также поддерживает наследование классов, если язык не поддерживает наследование, класс имеет мало смысла.

 1.0.1 унаследовали формулировка

Класс Дедушка:
     Защита танец (Я):
         пропуск


класс Отец (Дедушка):   # родитель или базовый класс

    Защита футбол (самостоятельно):
         передать 
    четкости баскетбола (сам):
         пройти 
    Защиту somking (Я):
         передать 
    Защиту пить (самостоятельно):
         передать 
    четкости Haircare (Self):
         пропуск

класс сын (отец):   # подклассы, или производный класс 
    DEF Reading (Self):
         Pass

OBJ = сын ()
obj.football ()

Самые простые упражнения:

 

Класс F:

    Защиту f1 (Я):
         печать ( ' F.f1 ' )

    Защиту f2 (Я):
         печать ( ' F.f2 ' )

Класс S (F):
     Защита s1 (Я):
         печать ( ' S.s1 ' )


OBJ = S ()
obj.s1 ()

obj.f2 ()

 

1.0.2 Наследование переписан:

Если метод с родительским классом внутри не хочет быть родитель классом внутри метода, повторной записи.

При выполнении, он не будет идти к методу родительского класса.

Класс F:

    Защиту f1 (Я):
         печать ( ' F.f1 ' )

    Защиту f2 (Я):
         печать ( ' F.f2 ' )

Класс S (F):
     DEF S1 (Self):
         Печать ( ' S.s1 ' )
     DEF F2 (Self):   # метод родительского класса переопределяет 
        Print ( ' S.f2 ' )


OBJ = S ()
obj.s1 () # s1 является параметром самого, это означает , что эпоха OBJ 

obj.f2 () # самостоятельно всегда относится к вызывающему вызывает метод, является OBJ

Если мы хотим, чтобы выполнить метод родительского класса, есть два метода: один супер (), является прямым именем родительского класса метод вызова

супер ()  функция является вызов метода родительского класса (суперкласса) используется.

супер используется для решения проблемы множественного наследования, имя класса без проблем вызвать метод родительского класса непосредственно при использовании одиночного наследования, но если вы используете множественное наследование, включает в себя порядок поиска (MRO), повторные звонки (алмаз наследование) и различные другие проблема.

MRO является таблицей порядка разрешения класса пути, по сути, является таблицей порядка наследования, когда метод родительского класса.

супер синтаксис:

супер (типа [, object- или -типа])

Тип: название подкласса

▪ Таблица или типа: это само

Класс F:

    Защиту f1 (Я):
         печать ( ' F.f1 ' )

    Защиту f2 (Я):
         печать ( ' F.f2 ' )

Класс S (F):
     Защита s1 (Я):
         печать ( ' S.s1 ' )
     Защита f2 (Я):
        Супер (S, Self) .f2 () # найти родительский класс, то метод родительского класса выполняется f2 
        F.f2 (Self)   # может быть выполнено , например родительский класс переписывается 
        Print ( ' S.f2 ' )

. Супер () ххх, супер (ребенок, самостоятельно) .xxx

Метод Метод 1: супер (подкласс, самость) в родительском классе (Arg).

Способ 2 Способ: Метод имени родительского класса родительского класса (Self Arg.)

Класс FooParent (объект):
     Защита  __init__ (самостоятельно):
        self.parent = « Я \» м родителя. « 
        Печать ( » Родитель " )
    
    Защиту бар (я, сообщение):
         печать ( " % S от Родителя " % сообщений)
 
Класс FooChild (FooParent):
     DEF  __init__ (Self):
         # Супер (FooChild, Self) сначала найти FooChild родительский класс (этот класс FooParent), а затем преобразует объект FooChild класса объекта класса FooParent из 
        супер (FooChild, самость). __init__ ()    
         Печать ( ' Детский ' )
        
    Защиту бар (я, сообщение):
        супер (FooChild, самость) .bar (сообщение)
        печать ( « Детский бар фикция » )
         печать (self.parent)
 
если  __name__ == ' __main__ ' :
    fooChild = FooChild ()
    fooChild.bar ( ' HelloWorld ' )

 

рекомендация

отwww.cnblogs.com/rollost/p/10926400.html