如题
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表示)隐式传参进去。