我有两个班,一个是父母,另一个是孩子.
class Parent(object):
def __init__(self):
#does something
def method_parent(self):
print "Parent"
class Child(Parent):
def __init__(self):
Parent.__init__(self)
def method_parent(self):
print "Child"
Run Code Online (Sandbox Code Playgroud)
继承父级后,我想修改Parent方法,method_parent保留该方法的原始功能,并为该方法添加一些额外的代码行.
我知道我可以创建一个新的方法
def method_child(self):
self.method_parent()
#Add extra lines of code to perform something
Run Code Online (Sandbox Code Playgroud)
但我想使用方法的原始名称.我无法复制该方法的源代码,因为该方法来自C模块
我想要实现的是这样的
def method_parent():
#do parent_method stuff
#do extra stuff
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
Ale*_*eau 10
您始终可以使用该super()功能从父级调用代码.它给出了父母的参考.所以,要打电话parent_method(),你应该使用super().parent_method().
这是一个代码片段(用于python3),展示了如何使用它.
class ParentClass:
def f(self):
print("Hi!");
class ChildClass(ParentClass):
def f(self):
super().f();
print("Hello!");
Run Code Online (Sandbox Code Playgroud)
在python2中,你需要使用额外的参数调用super : super(ChildClass, self). 所以,该片段将成为:
class ParentClass:
def f(self):
print("Hi!");
class ChildClass(ParentClass):
def f(self):
super(ChildClass, self).f();
print("Hello!");
Run Code Online (Sandbox Code Playgroud)
如果您调用f()ChildClass的实例,它将显示:"嗨!您好!".
如果你已经用java编码,它基本上是相同的行为.您可以在任何地方打电话给超级.在一个方法中,在init函数中,......
还有其他方法可以做到这一点,但它不太干净.例如,你可以这样做:
ParentClass.f(self)
Run Code Online (Sandbox Code Playgroud)
调用父类的f函数.