小甲鱼 发表于 2022-7-18 04:09:06

已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览 购买主题

小古比鱼 发表于 2022-9-29 10:59:01

运算相关的魔法方法中有些涉及位运算,故本节首先复习了位运算的相关知识。需要注意的是,左移运算符和右移运算符右侧的数字(移动位数)不能是负数,否则会引发ValueError异常,移位的结果则是整数;按位或、按位异或、按位与、移位优先级依次递增,按位取反则与正负号优先级相同。还有三个运算相关的魔法方法属于math模块的函数,math模块涵盖了许多与数学运算有关的函数,值得课后认真学习一下!视频最后还讲解了一个容易被误解的魔法方法__index__(),只有当对象作为索引值或参数被访问时才会触发该方法,而千万不要望文生义,想当然地以为是对象的索引访问触发的噢!

migu_sm1 发表于 2022-11-22 17:47:27

Learning....
只剩下小古比鱼了{:10_247:}

Ensoleile 发表于 2023-1-6 17:34:27

本帖最后由 Ensoleile 于 2023-1-10 00:33 编辑

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

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

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

c = C()
try:
    print(c)
except TypeError as e:
    print(e)
#'C' object is not subscriptable
s = 'fishc'
print(s)
#被拦截了~
#h
#也可以传进bin(c)触发

yukari123 发表于 2023-1-13 16:25:14

__index__:       
#当对象作为索引值或参数时才会触发index魔法方法
c=C()
s='love'
s
出错啦
'e'
#定位到下表索引3的位置

andyleesh 发表于 2023-1-13 20:43:59

打卡

lyjcll 发表于 2023-3-12 19:06:55

class S1(str):
    pass

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

s1=S1('apple')
s2=S2('banana')
print(s1+s2)#l类s1中没有重写__add__()方法,但对象s1来自类S1,而类S1又继承了类str,那么s1不就会按照MRO去找类str的__add__方法吗?不也能找到执行字符串的拼接吗?
                     我调试代码时发现确实是调用的s2的__radd__(),不知为什么》
页: [1]
查看完整版本: 第067讲:类和对象(X)