Наследование в Python | Набор 2

| | | | | | | | | |

В Python есть две встроенные функции, связанные с наследованием. Вот они:

1. isinstance(): проверяет тип объекта. Его синтаксис:
isinstance (object_name, class_name)
Он возвращает True, если класс object_name равен class_name, иначе False .
Например. :


# Код Python для демонстрации issubclass()


print ( isinstance ( 5 , int ))

Выход:

True 

Приведенный выше код отобразит следующий вывод:
Верно
Это связано с тем, что 5 является целым числом и, следовательно, принадлежит классу int.
ПРИМЕЧАНИЕ. Int — это тип и класс в Python.

2. issubclass(): проверяет, является ли конкретный класс дочерним по отношению к другому классу или нет. Его синтаксис:
issubclass (childclass_name, parentclass_name)
Он возвращает True , если внедренный дочерний класс фактически является производным от внедренного родительского класса, в противном случае он возвращает False .
Например:


# Код Python для демонстрации issubclass()

class A ():

def __ init __ ( self , a):

self . a = a

класс B (A):

def __init __ ( self , a, b):

self <класс кода ="простой">. b = b

A .__ init __ ( self , a)

print ( issubclass (B, A))

Выход:

True 

Приведенный выше код отобразит следующий вывод:
True

Множественное наследование.
Когда класс наследуется от нескольких родительских классов, это называется множественным наследованием. Это работает так же, как одиночное наследование.


Выход:

метод1 из class B method1 класса A 

Код вызывает method1 класса B, а не A, потому что Python ищет функцию снизу вверх.
Если вы хотите вызвать method1 класса A, замените self.method1 () с A.method1 (self).
Описанная выше процедура переопределения методов работает в классах старого стиля, то есть в классах, в которых родительский класс не наследуется от & # 39; объект & # 39; class.
Для классов нового стиля, в которых родительский класс наследуется от встроенного класса объектов, существует другая процедура для переопределения методов.
Метод super() помогает нам переопределять методы в классах нового стиля. Его синтаксис следующий:
super (имя_класса, экземпляр_) from_class) .overridden_имя_метода ()
Предположим, что есть 3 класса A, B и C. Все 3 из них имеют общую функцию назван & # 39; метод1'. Здесь работает Super().


class A ( object ):

def function1 ( self ):

print `функция класса A`

class B (A):

def function1 ( self ):

print `функция класса B`

super (B, self ). function1 ()

class C (B):

def function1 ( self ) :

print `функция класса C`

super (C, self ).function1 ()

j = C ()

j.function1 ()

Выход:

функция класса C функция класса B функция класса A 

Param Эфир "self" в суперфункции действует как объект родительского класса и, следовательно, вызывает функцию1 суперфункции. родительский класс.

# Код Python для демонстрации множественного наследования


# первый родительский класс

class Person ( object ):

def __ init __ ( self , name, idnumber):

self . имя = имя

self <класс кода = "обычный">. idnumber = idnumber


# второй родительский класс

class Employee ( object ):

def __ init __ ( self , оклад, пост):

сам . оклад = оклад

self . сообщение = сообщение


# наследовать от обоих родительских классов

class Руководитель (человек, сотрудник):

def __ init __ ( self , имя, idnumber, зарплата, должность, баллы):

self .points = точки

Person .__ init __ ( self , name, idnumber)

Сотрудник .__ init __( self ,зарплата,должность)

Вывод:

 

W При создании экземпляра класса убедитесь, что последовательность, в которой вы передаете параметры функции, соответствует линейности последовательности внутри класса. Например, в приведенном выше коде, если нам нужно сгенерировать экземпляр, мы напишем

ins = Leader(`Rahul`, 882016, 75000,` Assistant Manager`, 560) 

Если поменять местами последовательность 75000 и "Ассистент менеджера", код получит "Ассистент менеджера" в качестве оклада и 75000 в качестве должности.
Посмотрите на себя.


< table border = "0" cellpadding = "0" Cellspacing = "0" >

# первый родительский класс

class Person ( object ):

def __ init __ ( self , name, idnumber):

self . имя = имя

self <класс кода = "обычный">. idnumber = idnumber


# второй родитель

class Employee ( object ):

def __ init __ ( self , оклад, должность):

self <класс кода = "обычный">. зарплата = зарплата

self . сообщение = сообщение


# наследовать от обоих родительских классов

class Руководитель (человек, сотрудник):

def __ init __ ( self , имя, идентификационный номер, зарплата, должность, баллы):

self . баллы = баллы

Person .__ init__ ( self , name, idnumber)

Сотрудник .__ init __ ( self , оклад, должность)

print ( self .зарплата)


ins = Лидер ( `Rahul` , 882016 , `Ассистент менеджера` , 75000 , 560 )

Выход:

Ассистент менеджера 

Переопределение методов.
Переопределение метода означает переопределение метода в подклассе, если он уже определен в другом классе.
Метод в подклассе будет вызываться как переопределенный только в том случае, если в суперклассе существует другой метод с таким же именем и тем же набором параметров.
Кроме того, мы не можем переопределить закрытый метод суперкласса, перед которым стоит двойное подчеркивание. name.
Например:


# Базовый класс

class A ( object ):

def __ init __ ( self code> ):

Constant1 = 1

def method1 ( self ):

print ( ` method1 of class A` )

class B (A):

def __ init __ ( self ):

константа2 = 2

self . call1 ()

A. __init __ ( self )

def method1 ( self ):

print ( `метод1 класса B` )

def call1 ( self ):

self . method1 ()

A.method1 ( self )

b = B ()