Discuss / Python / 为什么通过动态绑定类的实例方法,不能修改实例属性?

为什么通过动态绑定类的实例方法,不能修改实例属性?

Topic source

大灰灰69223

#12 Created at ... [Delete] [Delete and Lock User]

因为你是给类绑定的方法,而不是给实例绑定的方法。调用方法获取和修改的属性其实都是类的属性和方法,并没有影响到实例的属性。

看了CSDN上关于MethodType方法的解析:Python3中的MethodType方法详解_vzp的博客-CSDN博客_methodtype python3

意思应该是用MethodType方法为类绑定外部方法,所有该类下的具体实例都可以调用该方法,但是每次调用仅作用于该类的对应属性,不改变实例中的对应属性

如果用直接赋值的方式为类添加方法,则实例每次调用该方法都只作用于实例中的对应属性。

何梓猪

#14 Created at ... [Delete] [Delete and Lock User]

我测试了一下,t.set_score实际上修改的是Student类的score,实例tscore仍然指向80这个值。

但是,只有给Student添加属性,才能给Student的实例添加方法,因此要用Student.set_score=set_score来给Student的实例添加方法。

这句话不是很能看懂。。。

打螺丝

#16 Created at ... [Delete] [Delete and Lock User]

MethorType(func,class)实际将func里的self指向了类,从而self.score=score意思变为了这是类属性为传入的参数score,而调用t.score指的是实例属性的score,调用实例的方法的时候,self传进去的是你在MethodType里的class本身,而不是你的实例,最终修改的就是类属性。


  • 1
  • 2

Reply