我可以用Python中的组合完全模仿继承行为吗?

时间:2017-07-04 10:02:05

标签: python inheritance object-composition

在python中,我希望通过组合模仿以下行为:

class Object1(object):

    def __init__(self):
        pass

    def method1(self):
        print "This is method 1 from object 1"
        return self.method2()

    def method2(self):
        raise Exception


class Object2(Object1):

    def method2(self):
        print "This is method 2 from object 2"

obj2 = Object2()
obj2.method1()

输出结果为:

This is method 1 from object 1
This is method 2 from object 2

换句话说,我希望能够创建一个复制已存在类的行为的类,但某些方法除外。但是,重要的是,一旦我的程序进入已经存在的类的方法,它就会返回到新类,以防我覆盖了该函数。但是,使用以下代码不是这种情况:

class Object3(object):

    def __init__(self):
        pass

    def method1(self):
        print "This is method 1 from object 3"
        return self.method2()

    def method2(self):
        raise Exception

class Object4(object):

    def __init__(self):
        self.obj = Object3()

    def __getattr__(self, attr):
        return getattr(self.obj, attr)

    def method2(self):
        print "This is method 2 from object 4"

obj4 = Object4()
obj4.method1()

而不是从Object3的method1(我想要的行为)调用Object4中的method2,而是调用Object3中的method2(并引发异常)。有没有办法实现我想要的行为而不需要对Object3进行更改?

1 个答案:

答案 0 :(得分:0)

由于没有对Object3类可用的Object4实例(obj4)的引用,它将调用self的method2,即Object3。

This answer可能会提供更清晰的解决方案。