面向对象6--绑定方法与非绑定方法

1>概念性的东西

在类内部定义的函数,分为两大类:

    1、绑定方法:绑定给谁,就由谁来调用,谁来调用,谁就是self/cls

        绑定到对象的方法:在类内定义的,没有被任何装饰器修饰的函数属性

            对象.bound_method(),自动将对象当做第一个参数传入

            (类也可以调用,但必须按函数的调取规则来,即self需要手动传参)

        绑定到类的方法:在类内定义的,用classmethod装饰器修饰的函数属性

            类.bound_method(),自动将类当做第一个参数传入

            (对象也可以调用,但仍将类作为第一个参数传入)

    2、非绑定方法

        不与类或者对象绑定,用staticmethod装饰器修饰的函数属性,类或者对象都可以调用,也就是普通函数,普通函数

    就没有自动传值这一说了,该怎么传就怎么传

    


2>应用

    设想一个场景,我先需要简单的查询对象的一些属性信息,定义一个简单的类解决,如下

    

    现在增加需求,有时候还需要从配置文件获取信息,遂,增加一个针对配置文件操作的函数,如下

    

    但是这样写有2个问题:1、调取麻烦,因方法本就是绑定给对象使用,类调用起来还要自己传参;2、类名写死了,obj不管

    是哪个类调用,都只能返回People类对象

    所以,这时可以介入 @classmethod了,改写如下

    

    综上所述

# 绑定给对象,就应该由对象来调用,自动将对象本身当做一个参数传入
# 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值