鱼C论坛

 找回密码
 立即注册
查看: 1670|回复: 6

[知识点备忘] 第067讲:类和对象(X)

[复制链接]
发表于 2022-7-18 04:09:06 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-29 10:59:01 | 显示全部楼层
运算相关的魔法方法中有些涉及位运算,故本节首先复习了位运算的相关知识。需要注意的是,左移运算符和右移运算符右侧的数字(移动位数)不能是负数,否则会引发ValueError异常,移位的结果则是整数;按位或、按位异或、按位与、移位优先级依次递增,按位取反则与正负号优先级相同。还有三个运算相关的魔法方法属于math模块的函数,math模块涵盖了许多与数学运算有关的函数,值得课后认真学习一下!视频最后还讲解了一个容易被误解的魔法方法__index__(),只有当对象作为索引值或参数被访问时才会触发该方法,而千万不要望文生义,想当然地以为是对象的索引访问触发的噢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-22 17:47:27 | 显示全部楼层
Learning....
只剩下小古比鱼了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-6 17:34:27 | 显示全部楼层
本帖最后由 Ensoleile 于 2023-1-10 00:33 编辑

运算相关的魔法方法(下)按位运算
  1. #位运算:<<   >>>   &   ^   |   ~   二进制按位运算
  2. print([bin(i) for i in range(10)])#bin()函数将数字转换为二进制,0b开头
  3. print(3 & 4)#0  按位与
  4. print(3 | 2)#3  按位或
  5. print(~2)#-3 按位非,涉及补码
  6. print(3 ^ 2)#1 按位异或
  7. print(8 >> 2)#2 右移,移动位数不能是负数
  8. print(8 << 2)#32 左移,移动位数不能是负数

  9. #math数学函数
  10. import math
  11. print((0.1 + 0.2) == 0.3 + math.ulp(0.3))#True

  12. #__index__(self)用法:让对象作为索引值被访问才会触发
  13. class C:
  14.     def __index__(self):
  15.         print('被拦截了~')
  16.         return 3

  17. c = C()
  18. try:
  19.     print(c[2])
  20. except TypeError as e:
  21.     print(e)
  22. #'C' object is not subscriptable
  23. s = 'fishc'
  24. print(s[c])
  25. #被拦截了~
  26. #h
  27. #也可以传进bin(c)触发
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-13 16:25:14 | 显示全部楼层
__index__:       
#当对象作为索引值或参数时才会触发index魔法方法
c=C()
s='love'
s[c]
出错啦
'e'
#定位到下表索引3的位置

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-13 20:43:59 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-12 19:06:55 | 显示全部楼层
class S1(str):
    pass

class S2(str):
    def __radd__(self,other):
        print('调用的是s2的__radd__魔法方法实现字符串拼接。')
        return  self+other

s1=S1('apple')
s2=S2('banana')
print(s1+s2)#l类s1中没有重写__add__()方法,但对象s1来自类S1,而类S1又继承了类str,那么s1不就会按照MRO去找类str的__add__方法吗?不也能找到执行字符串的拼接吗?
                     我调试代码时发现确实是调用的s2的__radd__(),不知为什么》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表