#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