只剩下小古比鱼了{:10_247:} 本帖最后由 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)触发 __index__:
#当对象作为索引值或参数时才会触发index魔法方法
c=C()
s='love'
s
出错啦
'e'
#定位到下表索引3的位置
打卡 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]