Вызов метода базового класса из производного класса объекта python - PullRequest
1 голос
/ 08 мая 2019

У меня есть два класса и методы с одинаковым именем. У меня есть объект производного класса.Когда я вызываю метод (foo) из объекта производного класса, он должен вызывать метод базового класса.

class A:
    def foo(self):
        print "A Foo"

class B(A):
    def foo(self):
        print "B Foo"

b = B()
b.foo() # "B Foo"

После выполнения поиска я получил какое-то решение, как показано ниже, и не уверен, является ли это правильным способом сделать этоили нет

a = A()
b.__class__.__bases__[0].foo(a) # A Foo

Есть ли лучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Если вы используете Python 3, используйте super:

class A:
    def talk(self):
        print('Hi from A-land!')

class B(A):
    def talk(self):
        print('Hello from B-land!')

    def pass_message(self):
        super().talk()

b = B()
b.talk()
b.pass_message()

Выход:

Hello from B-land!
Hi from A-land!

Вы можете сделать то же самое в Python 2, если наследуете от object и задаете параметры super:

class B(A):
    def talk(self):
        print('Hello from B-land!')

    def pass_message(self):
        super(B, self).talk()

b = B()
b.talk()
b.pass_message()

Выход:

Hello from B-land!
Hi from A-land!

Вы также можете вызвать метод, как если бы это была свободная функция:

A.talk(b)
B.talk(b)  # the same as b.talk()

Выход:

Hi from A-land!
Hello from B-land!
0 голосов

Когда вы вызываете метод (foo) из объекта производного класса, он не будет вызывать метод базового класса, потому что вы переопределяете его.Вы можете использовать другое имя метода для вашего базового класса или производного класса для устранения помех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...