面向对象6--绑定方法与非绑定方法
2018-03-01 09:46
197 查看
1>概念性的东西
在类内部定义的函数,分为两大类:
1、绑定方法:绑定给谁,就由谁来调用,谁来调用,谁就是self/cls
绑定到对象的方法:在类内定义的,没有被任何装饰器修饰的函数属性
对象.bound_method(),自动将对象当做第一个参数传入
(类也可以调用,但必须按函数的调取规则来,即self需要手动传参)
绑定到类的方法:在类内定义的,用classmethod装饰器修饰的函数属性
类.bound_method(),自动将类当做第一个参数传入
(对象也可以调用,但仍将类作为第一个参数传入)
2、非绑定方法
不与类或者对象绑定,用staticmethod装饰器修饰的函数属性,类或者对象都可以调用,也就是普通函数,普通函数
就没有自动传值这一说了,该怎么传就怎么传
2>应用
设想一个场景,我先需要简单的查询对象的一些属性信息,定义一个简单的类解决,如下
现在增加需求,有时候还需要从配置文件获取信息,遂,增加一个针对配置文件操作的函数,如下
但是这样写有2个问题:1、调取麻烦,因方法本就是绑定给对象使用,类调用起来还要自己传参;2、类名写死了,obj不管
是哪个类调用,都只能返回People类对象
所以,这时可以介入 @classmethod了,改写如下
综上所述
# 绑定给对象,就应该由对象来调用,自动将对象本身当做一个参数传入
在类内部定义的函数,分为两大类:
1、绑定方法:绑定给谁,就由谁来调用,谁来调用,谁就是self/cls
绑定到对象的方法:在类内定义的,没有被任何装饰器修饰的函数属性
对象.bound_method(),自动将对象当做第一个参数传入
(类也可以调用,但必须按函数的调取规则来,即self需要手动传参)
绑定到类的方法:在类内定义的,用classmethod装饰器修饰的函数属性
类.bound_method(),自动将类当做第一个参数传入
(对象也可以调用,但仍将类作为第一个参数传入)
2、非绑定方法
不与类或者对象绑定,用staticmethod装饰器修饰的函数属性,类或者对象都可以调用,也就是普通函数,普通函数
就没有自动传值这一说了,该怎么传就怎么传
2>应用
设想一个场景,我先需要简单的查询对象的一些属性信息,定义一个简单的类解决,如下
现在增加需求,有时候还需要从配置文件获取信息,遂,增加一个针对配置文件操作的函数,如下
但是这样写有2个问题:1、调取麻烦,因方法本就是绑定给对象使用,类调用起来还要自己传参;2、类名写死了,obj不管
是哪个类调用,都只能返回People类对象
所以,这时可以介入 @classmethod了,改写如下
综上所述
# 绑定给对象,就应该由对象来调用,自动将对象本身当做一个参数传入
# 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入
相关文章推荐
- python 面向对象之多态与绑定方法
- python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property
- Java学习之面向对象(1.Object类,(1)toString方法,(2)equals方法,2.对象转型(casting),3.动态绑定与多态,4.抽象类(abstract),5.Final关键字)
- Java面向对象【经典案例】类的属性是属于对象的,方法是动态绑定到对象的
- python-面向对象(绑定方法与非绑定方法)
- 面向对象的思维方法
- SpringMVC中利用@InitBinder来对页面数据进行解析绑定的方法
- javascript开发: JavaScript事件绑定的方法
- 如何将自定义的方法应用到DataGrid的绑定列上
- JQuery入门——用one()方法绑定事件
- Android ArrayAdapter,BaseAdapter,SimpleAdapter适配器绑定数据方法
- 动态给实例绑定属性和方法
- 练习-将函数方法封装成面向对象
- 面向对象的思维方法
- PHP面向对象-----魔术方法
- vue绑定事件后获取绑定事件中的this方法
- 用比较的方法认识PHP的面向对象
- GridView 数据绑定扩展-- 动态添加数据列,绑定方法
- cocos2d-html5 javascript 通过C++绑定,调用java方法
- Discuz! X2二级域名|泛解析|绑定域名的方法案例分析- -图例分析及详细解析!!!