m0_70680242 2022-07-03 11:23 采纳率: 82.2%
浏览 21
已结题

方法动态性测试时疑惑

如题

class Person:
    def work(self):
        print("上班?")
def play_game(s):
    print("{}玩游戏?".format(s))
def work2(s):
    print("或许?")
Person.playgame = play_game     #将游离的方法赋值到Person上
p = Person()                    #Person赋值到p
p.work()                        #输出一个方法
p.playgame()                    #输出加入的方法
Person.work = work2             #代替掉原来的work
p.work()                        #输出代替完毕的work
#提问:第六行为什么要在work2上加个临时变量?(不加则会报错缺少一个变量)
#(报错代码:TypeError: work2() takes 0 positional arguments but 1 was given)
  • 写回答

1条回答 默认 最新

  • 请叫我问哥 新星创作者: python技术领域 2022-07-03 15:32
    关注

    如果是写成 Person.playgame = play_game(),然后直接Person.playgame,就不用增加形参了。
    你这里增加的s其实就是self,因为Person.playgame() 加上小括号,程序认为调用的是类方法,所以会像其他类方法一样,把自己(通常用self表示)隐式传参进去。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月3日
  • 已采纳回答 7月3日
  • 创建了问题 7月3日