Python(day.11 魔法方法)

  1. 魔法方法总是被双下划线包围,例如_init_
  2. 魔法方法是面向对象的Pyton的一切
  3. 其魔力体现在总能够在适当的时候被调用

构造和析构

  1. init(self[,…])
    类在实例化方法的时候首先会调用的一个方法。例如下例,需要在类定义的时候传入参数,则需要对类重写:
    在这里插入图片描述
    注:init() 自身不能有返回值。

  2. new(cls[,…])
    cls:类。
    当继承一个不可变类型的类需要进行修改的时候,即需要魔法方法的重写功能。
    在这里插入图片描述

  3. del(self)
    如果说init和new方法是对象的构造器,那么del为一个析构器。
    在这里插入图片描述
    只有当所有指向对象的引用都被删除的时候才会启用垃圾回收机制,而垃圾回收机制销毁对象的时候才会调用_del_方法。

工厂函数

在这里插入图片描述
注:真除法指除完以后带小数;mod取余数;divmod(a,b)返回的值是一个元组:(a//b,a%b),例如5除以3余2,则返回值为2;pow为进行幂运算;我们所理解的最小存储单位是字节,CPU理解的是位(二进制),一个字节8位,故按位左移右移是指二进制下的位数移动。
在这里插入图片描述
此时会进入无限递归的状态,因为return中的正好是_add_()中的参数,修正后:在这里插入图片描述
其中,int即为被覆盖的工厂函数。

附件:Python 魔法方法详解

反运算:

在这里插入图片描述
a+b因为都有_add_方法所以为触发_radd_;当1+b时,因为1没有该方法,故直接触发b的_radd_方法,同时b是带入的self位置,故返回2。

同样,
在这里插入图片描述
因为3-a中3没有对应方法,触发a的时候即为a-3;若想3-a需要改变other和self位置。

一元操作符

abs()为取绝对值;按位求反指0变1,1变0。

类的定制(习题课)

在这里插入图片描述

需要的资源:

在这里插入图片描述

扩展阅读链接:time 模块详解(时间获取和转换)
表现类时,若想实现输入变量就能返回一个值则需要该两个方法对方法重写:

在这里插入图片描述

正式编写:

在这里插入图片描述在这里插入图片描述

运行结果:

在这里插入图片描述
在这里插入图片描述

由于时间的该进阶机制,所以当时间过长的时候会出现下列错误:

在这里插入图片描述

属性访问

在这里插入图片描述

例如:

在这里插入图片描述

课堂练习:

在这里插入图片描述
在这里插入图片描述

此处应注意使用基类super防止进入无限递归;调用后:

在这里插入图片描述

基类也可以使用_dict_代替:

在这里插入图片描述

描述符

描述符就是将某种类型的类的实例指派给另一个类的属性。而特殊类型即要实现以下三个或其中一个:
get(self,instance,owner)
用于访问属性,他返回属性的值
set(self,instance,value)
将在属性分配操作中调用,不返回任何内容
delete(self,instance)
控制删除操作,不返回任何内容
在这里插入图片描述

练习

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官峰晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值