Как обращаться к родительскому методу в python?

Предположим, что у меня есть два класса (один - родительский и один - подкласс). Как я могу ссылаться на метод в родительском классе, если метод также определен в подклассе разным?

Вот код:

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, который создал бы бесконечную рекурсию. Заранее благодарю вас.

Ответ 1

Если вы знаете, что хотите использовать A, вы также можете явно ссылаться на A таким образом:

class B(A):
    def f(self,num): 
        return 7 * A.f(self,num)

помните, что вам нужно явно указать аргумент self для функции-члена A.f()

Ответ 2

Используйте super:

return 7 * super(B, self).f(num)

Или в python 3, это просто:

return 7 * super().f(num)

Ответ 3

В соответствии с другими ответами существует множество способов вызова методов суперкласса (включая конструктор), однако в 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) в соответствии с документами.

Ответ 4

class B(A):
    def f(self, num):
        return 7 * super(B, self).f(num)

Ответ 5

Почему бы не сохранить его простым?

class B(A):
    def f(self, num):
        return 7 * A.f(self, num)

Ответ 6

вы можете использовать супер или если вы можете быть более явным и делать что-то вроде этого.

class B(A):
  def f(self, num):
    return 7 * A.f(self, num)