为了账号安全,请及时绑定邮箱和手机立即绑定

在实例级别覆盖方法

在实例级别覆盖方法

森栏 2020-02-01 15:48:38
Python中是否有一种方法可以在实例级别覆盖类方法?例如:class Dog:    def bark(self):        print "WOOF"boby = Dog()boby.bark() # WOOF# METHOD OVERRIDEboby.bark() # WoOoOoF!!
查看完整描述

3 回答

?
慕桂英3389331

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!!


查看完整回答
反对 回复 2020-02-01
?
慕容3067478

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!!


查看完整回答
反对 回复 2020-02-01
  • 3 回答
  • 0 关注
  • 334 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信