如何使用Python类来促进代码重用?

时间:2016-11-29 21:47:44

标签: python class inheritance

除了一个函数f(x)之外,我有两个共享许多常见内容的类。

class A(object):
    def __init__(self):
        // some stuff
    def g(self):
        // some other stuff
    def f(self, x):
        // many lines of computations
        q = ...
        y = ...
        return y

class B(A):
    def f(self, x):
        // same many lines as in A
        q = ...
        y = ...
        // a few extra lines
        z = ... # z needs both y and q
        return z

在这种情况下,我是否必须在B类中从头开始定义f(x)?是否有一些技巧可以重用A.f(x)中的代码?

我能想到的一种方法是将q设为实例属性self.q,然后执行以下操作

def f(self.x):
    y = A.f(self, x)
    // a few extra lines
    z = ... # using y and self.q
    return z

或者让A.f(x)同时返回qy,然后在B A.f(self, x)的定义中调用f(x)

这些方法是标准方法吗?还有更好的东西吗?

1 个答案:

答案 0 :(得分:0)

假设您想要围绕类组织代码。如果是这种情况,那么我强烈建议使用super来引用超类:

class MyA(object):
    def f(self, x):
        print 'MyA'
        return x


class MyB(MyA):
    def f(self, x):
        print 'MyB'
        print super(MyB, self).f(x)

这种方法允许您坚持使用类,并且是一种引用继承类的惯用方法。

如果您不需要以这种方式组织代码,或者有理由将事情分解为代码中不关心这些类的其他部分可用的函数,那么您可以移动{{ 1}}逻辑到函数中。

以下是一个例子:

f