0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python默认类中的绑定方法怎么解除和对象的绑定关系呢

冬至配饺子 来源:多兰多 作者:Toranto 2022-08-18 16:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

property的使用

property是一个装饰器,可以将类方法转化为类属性的表达。

举个栗子:BMI指数,肥胖指数,很显然,这是一个计算过程,但是在我们人类的认知当中,BMI更应该是一个属性而非方法。

pYYBAGL98LOAZOFDAABPcM0Z4Jk459.pngpYYBAGL98LiAAR0XAACVZTCd58g801.png

当我们把代码换成:

poYBAGL98MuACC49AAB-P9uFHSc904.png

很明显,很难察觉这到底是执行了一个方法还是调用了一个属性。

绑定方法

一、对象绑定(默认)

绑定方法:

绑定给谁,就由谁来调用,谁来调用就把它当作一个参数自动传入

python中,凡是类中的方法默认情况都是绑定给对象使用的

poYBAGL98O2AEUw_AABRdlmLAiI387.pngpYYBAGL98PKABiPZAAArtdGovy0192.png

我们得到了一段bound method一段文字,这就是绑定方法。这里面的tell_info方法是绑定给对象使用的。

那么,当我们用类来调用该方法呢?会产生怎样的效果?

poYBAGL98RyAI07JAACb2d3TCZo749.pngpYYBAGL98S2AamLnAABEyN4GbGA758.png

为了更明显,我们随便定义一个函数来执行一下:

poYBAGL98UeAeAXeAAAp4bpV_aE923.pngpoYBAGL98U2AWcWlAABODPoCZdw883.png


这下很醒目了吧,当类中的方法,用类去调用时,该方法是被当做普通函数来执行,而对象去调用则为绑定方法。对象绑定方法在python是默认的,前两天使用的也都是对象绑定方法,这里就不做演示了。

二、类绑定方法(classmethod)

既然Python默认类中的方法或函数,都是绑定给对象使用。那么类中的绑定方法怎么解除和对象的绑定关系,进而绑定到类呢?

小明:“你问我我问谁啊?”

这个时候需要用到classmethod方法,它也是个装饰器。

poYBAGL98XqAR2D4AAC4SAAMCn4637.pngpYYBAGL98ZOAV0zhAABRhD_SvT0606.png

和对象的绑定方法一样:绑定给类,就由类来调用,并将类作为第一个参数传入;

和对象绑定方法不同在于:当对象在调用类的绑定方法时,也会默认把类当做参数传递进去。

cls和self都是一种命名习惯,cls作为第一个参数来表示类本身,在类方法中用到。

三、类绑定方法示例

pYYBAGL98cyAJgfzAADn6jthuTc136.pngpYYBAGL98dGAcyCaAACW1myfplE811.pngpoYBAGL98eSAASqnAACAhATIzFI099.png

例子用的可能过于粗糙,那能怎么办呢,我也是这样学的。。。

非绑定方法

在类中,有很多普通的方法,本身不需要绑定给对象或类来使用,谁都可以调用,没有自动传值效果,这就是非绑定方法。在python中,方法会自动绑定给对象,当我们需要解绑时来形成非绑定方法时,需要用到staticmethod方法,它还是一个装饰器。

poYBAGL98gWANyM7AABzyuDLLOg653.pngpoYBAGL98gqAWwLTAABwPS7UtWM053.png

给每个人生成一个id号的示例:

poYBAGL98iWAV6a_AADXV5krWRo516.png

poYBAGL98jmAbU47AAB6O9qQJ5E632.png



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    58

    文章

    4883

    浏览量

    90294
  • BMI
    BMI
    +关注

    关注

    0

    文章

    12

    浏览量

    3506
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    是否可以将 UART4 与 Linux tty 设备绑定,并将其用于 EVK 板与主机 PC 以及 UART2 之间的通信?

    on the Cortex-M7 core on the EVK board according to the hardware user\'s guide. 是否可以将 UART4 与 Linux tty 设备绑定,并将
    发表于 04-10 11:47

    【教程】一文教会你CE31-MD01X从绑定到场景控制

    本教程用于指导我司CE31-MD01X的使用。一:图文教程第一步:注册登录小程序打开微信小程序,搜索亿佰佰特云智能,界面右下角点击我的,点击授权登录,绑定账号。第二步:添加设备点击加号,再点击扫码
    的头像 发表于 11-06 19:33 713次阅读
    【教程】一文教会你CE31-MD01X从<b class='flag-5'>绑定</b>到场景控制

    图解码说-六大UML关系(依赖,继承,实现,关联,聚合,组合)

    UML 图是面向对象设计的 “施工图”,而依赖、继承、实现、关联、聚合、组合这六大关系,就是图中定义互动规则的核心 “语法”。掌握它
    的头像 发表于 11-05 09:03 892次阅读
    图解码说-六大UML<b class='flag-5'>类</b>图<b class='flag-5'>关系</b>(依赖,继承,实现,关联,聚合,组合)

    使用jQuery的常用方法与返回值分析

    \'); 返回值:返回一个jQuery对象,该对象是选中元素的集合。 事件处理 jQuery简化了事件的绑定解除,常用的方法有.on()和
    发表于 10-01 20:18

    时序约束管脚绑定不成功问题

    {[新手提问]: 关于引脚绑定问题}在绑定vivado引脚时,选项没有原理图可绑定的引脚,需要绑定
    发表于 08-21 17:18

    如何将 UID 代码绑定到 M031 LDROM 和 APROM 固件?

    将 UID 代码绑定到 M031 LDROM 和 APROM 固件
    发表于 08-20 06:38

    如何确定PSoC™ Creator 绑定数据的行/位置?

    十六进制转储的比较可以看出,粘合数据似乎存储在第 389 行和第 391 行。 有几个问题。 那么,是否有适当的行来保护引导加载程序 0-388? 如何确定PSoC™ Creator 绑定数据的行/位置? 我可以设置粘合数据的位置吗?我尝试过这个但并没有改变。 这是保护
    发表于 07-22 07:58

    Jtti.ccVPS和IP的关系是什么?一文讲清服务器背后的网络逻辑

    不少朋友在使用 VPS 搭建网站、做代理或远程桌面时,经常听到“独立IP”、“共享IP”、“原生IP”这些词,但到底 VPS 和 IP 是什么关系?有没有固定绑定?怎么查?怎么换?今天小编就从
    的头像 发表于 07-07 17:41 1118次阅读

    请问OpenVINO™ 是否支持 Rust 绑定

    无法确定OpenVINO™是否支持 Rust 绑定
    发表于 06-25 07:45

    同步任务开发指导

    ,例如无法单例创建的对象实现的方法。 使用TaskPool处理同步任务 当调度独立的任务,或者一系列任务为静态方法实现,或者可以通过单例构造唯一的句柄或
    发表于 06-19 07:57

    FA模型绑定Stage模型ServiceExtensionAbility介绍

    FA模型绑定Stage模型ServiceExtensionAbility 本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件
    发表于 06-04 07:55

    Stage模型绑定FA模型ServiceAbility的方法

    Stage模型绑定FA模型ServiceAbility 本小节介绍Stage模型的两种应用组件如何绑定FA模型ServiceAbility组件。 UIAbility关联访问
    发表于 06-04 06:54

    使用labview I/O服务器绑定变量写入出现异常数据?

    我在使用labview 2023Q创建I/O服务器,并创建了绑定变量,需要把仪器读取的数据写入变量地址,但是写入过程会出现错误数据,就比如下面变量F300003,在显示控件以及写入变量前连线上插入
    发表于 05-12 21:49

    使用CY7C65632-48AXC,是否必须先对设备进行编程才能使用它,或者是否也可以只使用HW引脚绑定选项?

    我们将使用CY7C65632-48AXC。 我们是否必须先对设备进行编程才能使用它,或者是否也可以只使用 HW 引脚绑定选项?
    发表于 05-12 07:59

    harmony OS NEXT-双向数据绑定MVVM以及$$语法糖介绍

    # 鸿蒙Harmony-双向数据绑定MVVM以及$$语法糖介绍 ## 1.1 双向数据绑定概念 在鸿蒙(HarmonyOS)应用开发,双向数据改变(或双向数据绑定)是一种让数据·模型
    的头像 发表于 04-29 16:52 1340次阅读