7

サードパーティの Python コードの動作を変更することを検討しています。基本クラスから派生した多くのクラスがあり、私の目標を簡単に達成するには、他のすべてのクラスを派生させるために使用される基本クラスをオーバーライドするのが最も簡単です。サードパーティのコードに触れることなくこれを行う簡単な方法はありますか? これを明確に説明できなかった場合:

class Base(object):
    '...'

class One(Base)
    '...'

class Two(Base)
    '...'

...上記のコードを実際に変更Base せずに変更を加えたいと思います。おそらく次のようなものです:

# ...code to modify Base somehow...

import third_party_code

# ...my own code

Python には、おそらくこの問題に対する素敵な組み込みのソリューションがいくつかありますが、私はまだそれを認識していません。

4

1 に答える 1

8

おそらく、メソッドにモンキーパッチを適用できますBaseか?

#---- This is the third-party module ----#

class Base(object):
  def foo(self):
    print 'original foo'

class One(Base):
  def bar(self):
    self.foo()

class Two(Base):
  def bar(self):
    self.foo()

#---- This is your module ----#

# Test the original
One().bar()
Two().bar()

# Monkey-patch and test
def Base_foo(self):
  print 'monkey-patched foo'

Base.foo = Base_foo

One().bar()
Two().bar()

これは印刷されます

original foo
original foo
monkey-patched foo
monkey-patched foo
于 2012-11-25T11:05:42.603 に答える