Python3中MethodType的使用

以下基于Python3.7

公共部分

from types import MethodType

class Student(object):
	pass

def set_name(self,name):
	self.name = name
	
s = Student()
b = Student()

不同的绑定方法

# A —— 将方法绑定到类上
Student.set_name = MethodType(set_name,Student)

# B —— 将方法绑定到实例对象上
s.set_name = MethodType(set_name,s)
b.set_name = MethodType(set_name,b)

不同的输出结果

# 最后分别调用
s.set_name('ss')
b.set_name('bb')
print(s.name,b.name)

...
A —— 输出如下
bb bb

B —— 输出如下
ss bb
...

为什么A情况下b的set_name会覆盖s呢?

#增加print看一下self是什么
def set_name(self,name):
	print(self==Student)
	self.name = name

...
输出结果是True
...

由此得出,self就是MethodType方法中传入的第二个参数对象Student
s和b每次调用set_name方法的时候修改的都是Student的name属性,
因此当然会后者覆盖前者
而B方法中传入的第二个参数就是s和b实例自己,所以他们每次修改的都是属于自己的name属性</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值