Discuss / Python / 望解惑,弄不懂为啥

望解惑,弄不懂为啥

Topic source

🍉

#1 Created at ... [Delete] [Delete and Lock User]
form types import MethodType
class Student(object):

    def set_age(self,age):
        self.age = age
#---------代码如上, 运行如下-----------
#1:
s = Student()
s.set_age = MethodType(set_age,s)  #运行这里会显示 'set_age' 不存在
s.set_age #直接这样,也会显示 'set_age' 不存在
#但是....可以直接:
s.age = 25  # 可以直接赋值,
# 所以搞不懂的地方在于,为啥'set_age'会显示不存在,然后绑定方法,这个实际作用的地方在哪里。

我运行s.set_age是存在的,怕不是你下面这句话没注释哦

s.set_age = MethodType(set_age,s)  #运行这里会显示 'set_age' 不存在

还有一点,MethodType本来就是给实例动态绑定方法的,故MethodType第一个参数一定是类外自定义函数的函数名

门小甲

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

根据你这个缩进,是不是set_age定义到Student类里面去了?

Jerry bonus

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

对的,教程里是说在实例内部定义一个方法,你这个是在类中定义的,所以出现了问题

你这个set_age的方法放到了student这个类里面的,要单独在外面写个函数然后创建实例的时候再加这个set_age的方法,所以你的缩进有问题

你的 from 写成 form了,同时再检查一下你的缩进,我运行的是没有任何问题的

Ives

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

你的程序中set_age定义于class内部,本来就有这个方法;而文中这个class本来没有set_age,在外面定义了一个set_age函数,然后把这个函数转换成一个方法绑定给class了


  • 1

Reply