Python - 继承和方法覆盖

时间:2017-05-29 15:02:43

标签: python class inheritance override

我有两个类,一个继承自另一个。我们称他们为ParentChild。 从这些类创建的两个对象都应该使用函数funA,如下所示

funA():
  X = another_function()
  Y = # some value
  X.append(Y)
  # do other computations

对于这两个类,函数funA看起来几乎相同,除了函数another_function(),它以不同的方式计算X的列表Parent,并且不同于Child。当然,我知道我可以覆盖Child类中的函数funA,但由于这个函数很长并且进行了多次操作,因此复制粘贴它会有点浪费。另一方面 - 我必须区分Parent类应该使用another_function()的一个版本,而Child类应该使用another_function()的第二个版本。是否可能指出哪个版本的another_function(让我们称之为another_function_v1another_function_v2)应该被每个类使用,或者唯一的解决方案是覆盖整个函数{{1} }?

2 个答案:

答案 0 :(得分:1)

您的帖子不太清楚但我认为funAParent的方法。如果是,只需添加一些调用正确函数的another_method方法:

class Parent(object):
    def another_method(self):
        return another_function_v1()

    def funA(self):
        X = self.another_method()
        Y = # some value
        X.append(Y)
        # do other computations

class Child(Parent):
    def another_method(self):
        return another_method_v2()

如果funA是一种类方法,你也希望another_method成为一种类方法......

答案 1 :(得分:1)

我不知道你的另一个功能来自哪里。我认为它们是正常的函数,可以导入和使用

class Parent(object):
    another_function = another_function_v1
    def funA(self):
        X = self.another_function()
        Y = # some value
        X.append(Y)
        # do other computations

class Child(Parent):
    another_function = another_function_v2