編集:私の仮定は間違っていました。以下のコードは、実際には私が望んでいたように機能します。私が観察していた動作は、完全に無関係に見えたために見落としていた、作業中のコードの別のビットが原因であることが判明しました。
だから私はこのように構造化されたいくつかのコードを持っています:
class B(object):
def foo(self):
print "spam"
def bar(self):
do_something()
self.foo()
do_something_else()
class C(B):
def foo(self):
print "ham"
def bar(self):
super(C, self).bar()
print "eggs"
c = C()
c.bar()
これは、do_something()、「spam」、do_something_else()を出力してから、「eggs」を出力します。ただし、私がやりたいのは、do_something()を出力し、「ham」、do_something_else()を出力してから、「eggs」を出力することです。つまり、CのbarメソッドからBのbarメソッドを呼び出したいのですが、BではなくCのfooメソッドを呼び出したいのです。
これを行う方法はありますか?私が扱っている実際のコードでは、Bクラスと実際にc.bar()を呼び出すコードの両方が、進化するサードパーティライブラリの一部であるため、それをいじくり回すことは最後の手段になることに注意してください。