在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进行更改?
答案 0 :(得分:0)
由于没有对Object3类可用的Object4实例(obj4)的引用,它将调用self的method2,即Object3。
This answer可能会提供更清晰的解决方案。