我在采访中遇到了这个问题:
class Parent(object):
def A(self):
print "in A"
class Child(Parent):
def A(self):
print "in B"
C=Child()
问题来到这里:
有什么办法可以只在实例级别调用父类函数
A
,而不在类中做任何更改?
搜索了很多问题,但没有找到任何满意的答案。请回复。
感谢。
答案 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()