【问题标题】:overwrite parent method partially in python在python中部分覆盖父方法
【发布时间】:2015-03-29 07:37:47
【问题描述】:

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

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中有黑魔法如何只覆盖一行?

【问题讨论】:

    标签: python inheritance overwrite


    【解决方案1】:

    没有什么神奇的方法可以做到这一点,你必须重写整个方法。

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

    1. 在一个单独的方法中分离出要在子级中覆盖的部分,以便在子级中重新实现。
    2. 如果可行,将参数(甚至使用类属性)传递给方法以改变方法的行为。

    在您的情况下,方法 #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")
    

    【讨论】:

      【解决方案2】:

      你可以引入一个你在子进程中覆盖的辅助方法。

      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")
      

      【讨论】:

        猜你喜欢
        • 2016-02-23
        • 2018-01-14
        • 2012-12-07
        • 1970-01-01
        • 1970-01-01
        • 2011-04-17
        • 1970-01-01
        • 2010-11-06
        相关资源
        最近更新 更多