在python中部分覆盖父方法

时间:2015-01-29 22:06:47

标签: python inheritance overwrite

我遇到需要覆盖父方法但只有一行的情况。我的初始代码非常大,所以我在一个例子中澄清了我的意思。 我有来自父母的方法:

class parent():
    def method(self):
        bla
        bla
        print("Parent method is working")
        bla
        bla

孩子:

class child(parent):
    def method(self):
        bla
        bla
        print("Child method working")
        bla
        bla

如您所见,两种方法几乎相同,但一条线不同。我是否必须在子方法中编写相同的代码才能打印不同的输出,或者python中有黑暗魔法如何只覆盖一行?

2 个答案:

答案 0 :(得分:6)

您可以引入一个在子项中覆盖的辅助方法。

class parent(object):
  def method(self):
    blah
    self.helper()
    blah
  def helper(self):
    print("parent running")

class child(parent):
  def helper(self):
    print("child running")

答案 1 :(得分:4)

这不是一种神奇的方法,你必须重写整个方法。

现在,当然,有各种解决方法。如果您可以编辑父级,则可以:

  1. 使用单独的方法将要在子项中覆盖的部分分开,以便在子项中重新实现。
  2. 如果可行,将参数(或甚至使用类属性)传递给方法以改变方法的行为。
  3. 在您的情况下,方法#1看起来像:

    class Parent(object):
         def method(self):
             print("Before!")
             self.inner()
             print("After!")
    
         def inner(self):
             print "In the parent"
    

    孩子:

    class Child(Parent):
        def inner(self):
            print("In the child")