在实例级别覆盖方法

Python中是否有一种方法可以在实例级别覆盖类方法?例如:


class Dog:

    def bark(self):

        print "WOOF"


boby = Dog()

boby.bark() # WOOF

# METHOD OVERRIDE

boby.bark() # WoOoOoF!!


森栏
浏览 335回答 3
3回答

慕桂英3389331

请不要这样做,如图所示。当您实例化与该类不同的实例时,代码变得不可读。您无法调试monkeypatched代码。当您在boby和中发现错误时print type(boby),您会看到(a)它是一只狗,但是(b)由于某种晦涩的原因,它不能正确吠叫。这是一场噩梦。不要做。请改为这样做。class Dog:    def bark(self):        print "WOOF"class BobyDog( Dog ):    def bark( self ):        print "WoOoOoF!!"otherDog= Dog()otherDog.bark() # WOOFboby = BobyDog()boby.bark() # WoOoOoF!!

慕容3067478

您需要使用来自类型模块的MethodType。MethodType的目的是覆盖实例级别的方法(以便在覆盖的方法中可以使用self)。请参阅以下示例。import typesclass Dog:    def bark(self):        print "WOOF"boby = Dog()boby.bark() # WOOFdef _bark(self):    print "WoOoOoF!!"boby.bark = types.MethodType(_bark, boby)boby.bark() # WoOoOoF!!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python