3 回答

TA贡献2036条经验 获得超8个赞
请不要这样做,如图所示。当您实例化与该类不同的实例时,代码变得不可读。
您无法调试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() # WOOF
boby = BobyDog()
boby.bark() # WoOoOoF!!

TA贡献1773条经验 获得超3个赞
您需要使用来自类型模块的MethodType。MethodType的目的是覆盖实例级别的方法(以便在覆盖的方法中可以使用self)。
请参阅以下示例。
import types
class Dog:
def bark(self):
print "WOOF"
boby = Dog()
boby.bark() # WOOF
def _bark(self):
print "WoOoOoF!!"
boby.bark = types.MethodType(_bark, boby)
boby.bark() # WoOoOoF!!
添加回答
举报