Python Функция super()

Python 内置函数Встроенные функции Python


Описание

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

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

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

Синтаксис

Ниже приведён синтаксис метода super():

super(type[, object-or-type])

Parameters

  • type -- класс.
  • object-or-type -- класс, обычно self

Одно из различий между Python3.x и Python2.x: Python 3 может напрямую использоватьsuper().xxxвместоsuper(Class, self).xxx :

Пример для Python3.x:

class A: def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super().add(x) b = B() b.add(2) # 3

Пример для Python2.x:

#!/usr/bin/python # -*- coding: UTF-8 -*- class A(object): # Python2.x не забудьте унаследовать object def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super(B, self).add(x) b = B() b.add(2) # 3

Возвращаемое значение

Нет.


Пример

Ниже приведён пример использования функции super:

Пример

#!/usr/bin/python # -*- coding: UTF-8 -*- class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print ('Parent') def bar(self,message): print ("%s от родителя" % message) class FooChild(FooParent): def __init__(self): # super(FooChild,self) сначала находит родительский класс FooChild (то есть класс FooParent), затем преобразует объект класса FooChild в объект класса FooParent super(FooChild,self).__init__() print ('Child') def bar(self,message): super(FooChild, self).bar(message) print ('функция bar класса Child') print (self.parent) if __name__ == '__main__': fooChild = FooChild() fooChild.bar('HelloWorld')

Результат выполнения:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

Python 内置函数Встроенные функции Python

Другие расширения