从派生类对象python调用基类的方法

2024-04-25 05:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个同名的类和方法。我有派生类的对象。当我从派生类对象调用方法(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

有没有更好的办法


Tags: 对象方法selffoodef解决方案基类class
2条回答

当您从派生类对象调用方法(foo)时,它不会调用基类方法,因为您正在重写它。可以为基类或派生类使用另一个方法名来解决冲突

如果您使用的是python3,请使用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!

如果从object继承并指定super的参数,则可以在Python 2中执行相同的操作:

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!

相关问题 更多 >