您的位置:首页 > 其它

面向对象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了,改写如下

    


    综上所述
# 绑定给对象,就应该由对象来调用,自动将对象本身当做一个参数传入
# 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: