在python中使用子类对象调用父类的重写方法

时间:2015-06-13 17:20:08

标签: python

我在采访中遇到了这个问题:

class Parent(object):
    def A(self):
        print "in A"
class Child(Parent):
    def A(self):
       print "in B"

C=Child()

问题来到这里:

  

有什么办法可以只在实例级别调用父类函数A,而不在类中做任何更改?

搜索了很多问题,但没有找到任何满意的答案。请回复。

感谢。

5 个答案:

答案 0 :(得分:3)

您可以使用super()内置。

>>> super(Child, C).A()
in A

它通常用于在子类中调用超类实现,但也允许在外部。文档说:

  

另请注意,super()不限于使用内部方法。他们俩   参数形式准确地指定参数并使其成为   适当的参考。

答案 1 :(得分:2)

明确地调用类上的方法。

$('.sort-link-css > a').click(function () {

    var className = $(this).attr('class');
    console.log(className);

    if (className == "sort_link asc") {
        $(this).removeClass('sort_link asc');
        alert("removed class sort_link asc");

    } else if (className == "sort_link desc") {

        $(this).removeClass('sort link desc');
        this.href = this.href.replace('asc', 'desc');
        $(this).attr('class', 'sort link asc');

    }

    else {
     alert("all tests failed");   
    }

})

答案 2 :(得分:0)

如您所见,对象的方法始终具有self参数。

您可以将对象方法称为

C.A()

或等效地,通过显式传递self参数,如:

Child.A(C)

在第二种方式中,您还可以使用C实例调用父类的方法:

Parent.A(C)

如果您正在寻找解决此问题的一般方法(即不知道父类的名称),您可以使用super()type()

super(type(C)).A(C)

但是,super()有一个很好的附加参数来指定一个对象实例,所以你也可以写:

super(type(C), C).A()

答案 3 :(得分:0)

使用super调用传递子类的type和所需的C实例对象:

super(type(C), C).A() # of the form super(class, obj) where class == Child and obj == C

答案 4 :(得分:0)

拥有实例C我们可以获得它的基类并调用它的A()
C.__class__.__base__().A()

相关问题