方法动态性测试时疑惑

如题

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)

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