Как указать, какой родительский класс использовать в функции super( ) в python?

#python #oop #inheritance #overriding

Вопрос:

Моя цель: создать метод с именем [identify2] в дочернем классе, который вызывает метод [identify] из класса Parent2 . Это должно быть сделано с помощью ключевого слова super() .

Моя проблема: имена методов в обоих родительских классах одинаковы. Но я хочу относиться только к методу класса parent2 с использованием ключевого слова super(). что мне делать?

 class Parent1:
  def identify(self):
    return "This method is called from Parent1"
    
class Parent2:
  def identify(self):
    return "This method is called from Parent2"
    
# declare child class here
class child(Parent1, Parent2):
  def identify(self):
    return "This method is called from Child"
  def identify2(self):
    super().identify()  # I want to call the method of Parent2 class, how?     
  
  
child_object = child()
#                                           Expected output:
print( child_object.identify() )        # This method is called from Child
print( child_object.identify2() )       # This method is called from Parent2
  
 

Ответ №1:

super может вызываться с параметрами типа и объекта, см. Документацию. Параметр type определяет, после какого класса в порядке mro начнется поиск метода. В этом случае для получения метода Parent2 поиск должен начинаться после Parent1 :

 class Parent1:
    def identify(self):
        return "This method is called from Parent1"
    
class Parent2:
    def identify(self):
        return "This method is called from Parent2"
    
# declare child class here
class Child(Parent1, Parent2):
    def identify(self):
        return "This method is called from Child"
    
    def identify2(self):
        return super(Parent1, self).identify()
  
  
child_object = Child()
#                                           Expected output:
print( child_object.identify() )        # This method is called from Child
print( child_object.identify2() )       # This method is called from Parent2
 

Это дает:

 This method is called from Child
This method is called from Parent2