在python中使用子类对象调用父类的重写方法
我在一次采访中提出了这个问题:在python中使用子类对象调用父类的重写方法,python,Python,我在一次采访中提出了这个问题: class Parent(object): def A(self): print "in A" class Child(Parent): def A(self): print "in B" C=Child() 问题: 是否有任何方法可以仅在实例级别使用子对象调用父类函数A,而无需对类进行任何更改 搜索了很多问题,但没有找到满意的答案。请回复 谢谢。显式调用类上的方法 Parent.A(C) 显式调用类上的方法 P
class Parent(object):
def A(self):
print "in A"
class Child(Parent):
def A(self):
print "in B"
C=Child()
问题:
是否有任何方法可以仅在实例级别使用子对象调用父类函数A
,而无需对类进行任何更改
搜索了很多问题,但没有找到满意的答案。请回复
谢谢。显式调用类上的方法
Parent.A(C)
显式调用类上的方法
Parent.A(C)
你可以使用内置的
它通常用于在子类内部调用超类实现,但也允许在外部调用。文件说明:
还要注意,super()不限于在方法内部使用。两个
参数形式精确指定参数,并使
适当的参考资料
你可以使用内置的
它通常用于在子类内部调用超类实现,但也允许在外部调用。文件说明:
还要注意,super()不限于在方法内部使用。两个
参数形式精确指定参数,并使
适当的参考资料
如您所见,对象的方法始终具有
self
参数
可以将对象作为方法调用
C.A()
或等效地,通过显式传递self
参数,如下所示:
Child.A(C)
在第二种方法中,还可以使用C
实例调用父类的方法:
Parent.A(C)
如果您正在寻找解决此问题的通用方法(即不知道父类的名称),则可以使用和:
但是,super()
有一个很好的附加参数来指定对象实例,因此您还可以编写:
super(type(C), C).A()
如您所见,对象的方法始终具有
self
参数
可以将对象作为方法调用
C.A()
或等效地,通过显式传递self
参数,如下所示:
Child.A(C)
在第二种方法中,还可以使用C
实例调用父类的方法:
Parent.A(C)
如果您正在寻找解决此问题的通用方法(即不知道父类的名称),则可以使用和:
但是,super()
有一个很好的附加参数来指定对象实例,因此您还可以编写:
super(type(C), C).A()
使用
super
调用传递子类的type
和所需的实例对象,即C
:
super(type(C), C).A() # of the form super(class, obj) where class == Child and obj == C
使用
super
调用传递子类的type
和所需的实例对象,即C
:
super(type(C), C).A() # of the form super(class, obj) where class == Child and obj == C
有了实例
C
,我们可以得到它的基类并调用它的A()
:C.\uu类.\uu基.\uu基A()
拥有实例C
我们可以得到它的基类并调用它的A()
:C.\uu class\uuu.\uu base\uuu().A()
不,它将调用父类方法A而不是被重写的B。不,它将调用父类方法A而不是被重写的B。或者super(C.\uu class\uuu,C)。A()
而不需要类名硬编码或super(C.\uu class\uu,C)。A()
而不需要类名硬编码