上一篇博客写了关于 实例方法、类方法,静态方法的思考,但是归根到底还是
python中绑定方法和非绑定方法的的区别
一、绑定方法:
1、凡是类中的方法或者函数,默认都是绑定给对象使用的。绑定给对象有一种好处,就是不用手动将对象传入。对象是自动传到类中的。
2、如果类来调用类中的方法,这个方法仅仅是一个函数,是函数的话,就不会有自动传值这一过程,函数有几个参数就得传递几个参数进去。这个参数可以是任意的,但是必须传递进去。
3、当对象调用类中方法时,则不用传递(前提是类中方法是有参数的,如果函数定义中没有参数传递,那么此时会自动传入对象,那么就会报错啦,前一篇博客中t.normalmethod()执行报错就是因为,normalmethod在定义的时候没有参数,使用对象调用的时候会自动传递自身作为参数,导致函数定义的参数和实际传递的参数不匹配)
二、类的绑定方法:
在Python中引入了@classmethod方法,将类中的方法绑定到类上(用@classmethod装饰,参数中传入cls).那么以此类推,一个方法绑定到谁的身上,那么在调用该函数的时候就默认将该调用者当做第一个参数传递到函数中。
那么绑定到类上的方法和绑定到对象上的方法有什么不同呢?
区别是:对象在调用类的绑定方法时:会自动将类当做默认参数传递进去,所以,实例可以调用实例方法,也可以调用类方法。y
总结一下:
1、凡是类中的方法和函数,都是绑定给对象使用的
2、绑定方法都有自动传值的过程,传进去的值就是对象本身
3、如果类想调用绑方法,就必须遵循函数定义好的参数规则,有几个参数,就必须传递几个参数
4、如果一个方法使用了@staticmethod装饰器,那么这个方法将绑定到类身上,不管是类调用还是对象调用,都会将类作为第一个参数传递进去。
二、非绑定方法:
通过以上的讲解,我们知道,一个方法要么绑定给类使用要么绑定给对象使用,那么有没有一种方法可以不绑定给两者使用的方法。 Python给我们提供了@staticmethod,可以解除绑定关系,将一个类中的方法变为一个普通函数。那么这个函数就遵循有几个参数就有传递几个参数的规则