课程
/后端开发
/Python
/python进阶
lambda 这个应该是一个系统函数,self.get_grade()应该是一个方法(类内定义),对象实例化的时候操作把一个函数赋给了方法,所以这个方法最终指向了一个函数,是这样吗...
2018-08-20
源自:python进阶 4-9
正在回答
self.get_grade 是一个实例属性,只不过传给它的值是一个lambda,所以这使得这个对象是一个可调用对象,就像你声明了一个函数f(),然后把函数名f传给了self.get_rade,不要被self.get_grade()这种形式所误导,实例方法都是要在参数列表中明确给出self的。
个人理解,方法是具体的,类似于实例,存在一个实例指向;函数是抽象的,类似于类。
与类和实例无绑定关系的function都属于函数(function);
与类和实例有绑定关系的function都属于方法(method)。
具体来说:
在class外部定义的函数,都是函数,不是方法
在class内定义的普通方法,因为它是要面向将来实例化对象的,其实它就是一个实例方法。它属于method,是一个方法。
在class内定义的静态方法,它与任何对象都没有联系,等同于是在class外定义的function,它属于函数。
在class内定义的类方法,它第一个参数必须是cls,它与class本身是绑定关系,它属于方法。
1小马哥1
liujlb 回复 1小马哥1
self.get_grade = lambda: 'A'
Python将等号右边的值赋给左边 , self.get_grade本身只是个变量,但lambda函数赋给这个变量
即self.get_grade成为一个方法(类内函数),已经不是变量了 是函数,调用函数肯定无值,
调用函数值需要在函数后面加上()
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计