1. ホーム
  2. python

[解決済み] インスタンスレベルでメソッドをオーバーライドする

2023-01-06 05:37:25

質問

Pythonで、インスタンスレベルでクラスメソッドをオーバーライドする方法はありますか? 例えば

class Dog:
    def bark(self):
        print "WOOF"

boby = Dog()
boby.bark() # WOOF
# METHOD OVERRIDE
boby.bark() # WoOoOoF!!

どのように解決するのですか?

このようなことはしないでください。 クラスと異なるインスタンスをモンキーパッチした場合、コードが読めなくなります。

モンキーパッチされたコードはデバッグできません。

のバグを発見した場合 bobyprint type(boby) を見れば、(a)それは犬であるが、(b)何らかの不明瞭な理由で正しく吠えないことがわかるだろう。 これは悪夢です。 やってはいけません。

代わりにこれをやってください。

class Dog:
    def bark(self):
        print "WOOF"

class BobyDog( Dog ):
    def bark( self ):
        print "WoOoOoF!!"

otherDog= Dog()
otherDog.bark() # WOOF

boby = BobyDog()
boby.bark() # WoOoOoF!!