【发布时间】:2013-08-23 23:22:23
【问题描述】:
我正在使用类似于此代码的东西:
class BaseClass(object):
def __getattr__(self, attr):
return lambda:'1'
class SubClass(BaseClass):
def foo(self):
suffix = '2'
return super(SubClass, self).foo() + suffix
class SubClass2(SubClass):
def foo(self):
suffix = '3'
return super(SubClass2, self).foo() + suffix
o = SubClass2()
print o.foo()
我希望看到“123”的输出,但我收到了错误AttributeError: 'super' object has no attribute 'foo'。 Python 甚至没有尝试使用基类的 __getattr__。
如果不修改基类并保持两个超级调用相似,我无法获得我想要的输出。有没有适合我的合作超级调用模式?
我知道 super() 以某种方式覆盖 getattr 以完成它需要做的事情,但我想问是否有任何合理的解决方法允许子类的 __getattr__ 在何时被调用合适。
【问题讨论】:
-
@eevee 建议的副本问“为什么 super 不起作用?”而我要求的程序确实有效,因为 super 不起作用。
标签: python super getattr getattribute