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
    +关注

    关注

    57

    文章

    4858

    浏览量

    89598
  • BMI
    BMI
    +关注

    关注

    0

    文章

    12

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

    {[新手提问]: 关于引脚绑定问题}在绑定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

    请问OpenVINO™ 是否支持 Rust 绑定

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

    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

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

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

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

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

    无法在iMX8上启动gpsd:GPSD绑定怎么解决?

    3.19) gpsd:错误:无法绑定到 IPv4 端口 gpsd,地址已在使用 gpsd:ERROR: 也许 gpsd 已经在运行了! gpsd:错误:无法绑定到 IPv6 端口 gpsd,地址已在
    发表于 04-04 07:58

    使用Yolo-v3-TF运行OpenVINO™对象检测Python演示时的结果不准确的原因?

    的模型与对象检测 Python* Demo 配合使用时无法检测对象python3 open_model_zoo/demos/object_detection_demo/
    发表于 03-06 06:31

    DLP4500 sdkpattern和Image如何使用?

    启动投影需要pattern类型的数据。我有需要投影的图片读取成Image,如何用这个Image创建pattern?pattern类似乎只有默认构造函数,我怎么把Image数据装载上pattern
    发表于 02-21 12:59

    KiCad 9 探秘(六):如何用&quot;器件&quot;玩转多通道设计与自定义DRC规则

    “  老版本的 KiCad 只有网络(Net Class),但没有器件(Component Class),在 KiCad 9 器件终于亮相了。结合规则区域,器件
    的头像 发表于 02-08 11:14 2563次阅读
    KiCad 9 探秘(六):如何用&quot;器件<b class='flag-5'>类</b>&quot;玩转多通道设计与自定义DRC规则

    迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-接口函数

    所示,包含了驱动的版本号、模块名、绑定、初始化和释放函数。 HdfLedDriverInit 函数是驱动初始化函数。 参数:deviceObject(设备对象)。 流程:获取设备资源接口,读取设备配置
    发表于 01-20 10:36