Ответ 1
Если вы знаете, что хотите использовать A, вы также можете явно ссылаться на A таким образом:
class B(A):
def f(self,num):
return 7 * A.f(self,num)
помните, что вам нужно явно указать аргумент self для функции-члена A.f()
Предположим, что у меня есть два класса (один - родительский и один - подкласс). Как я могу ссылаться на метод в родительском классе, если метод также определен в подклассе разным?
Вот код:
class A:
def __init__(self, num):
self.value=num
def f(self, num):
return self.value+2
class B(A):
def f(self, num):
return 7*self.f(num)
В самой последней строке я хочу обратиться к родительскому классу A с командой "self.f(num)", а не самому методу в B, который создал бы бесконечную рекурсию. Заранее благодарю вас.
Если вы знаете, что хотите использовать A, вы также можете явно ссылаться на A таким образом:
class B(A):
def f(self,num):
return 7 * A.f(self,num)
помните, что вам нужно явно указать аргумент self для функции-члена A.f()
Используйте super
:
return 7 * super(B, self).f(num)
Или в python 3, это просто:
return 7 * super().f(num)
В соответствии с другими ответами существует множество способов вызова методов суперкласса (включая конструктор), однако в Python-3.x процесс упрощен:
Python-2.x
class A(object):
def __init__(self):
print "world"
class B(A):
def __init__(self):
print "hello"
super(B, self).__init__()
Python-3.x
class A(object):
def __init__(self):
print "world"
class B(A):
def __init__(self):
print "hello"
super().__init__()
super()
теперь эквивалентен super(<containing classname>, self)
в соответствии с документами.
class B(A):
def f(self, num):
return 7 * super(B, self).f(num)
Почему бы не сохранить его простым?
class B(A):
def f(self, num):
return 7 * A.f(self, num)
вы можете использовать супер или если вы можете быть более явным и делать что-то вроде этого.
class B(A):
def f(self, num):
return 7 * A.f(self, num)
Проверьте мой ответ на Вызвать метод родительского класса из дочернего класса в Python?.
Это немного крутит на некоторых других здесь (которые не используют супер).