В 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
Множественное наследование.
Когда класс наследуется от нескольких родительских классов, это называется множественным наследованием. Это работает так же, как одиночное наследование.
# Код 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 ()
|
Выход:
метод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 суперфункции. родительский класс.