前言:
今天姐妹们对“python字符串加减”大致比较讲究,我们都想要剖析一些“python字符串加减”的相关文章。那么小编在网上汇集了一些对于“python字符串加减””的相关内容,希望朋友们能喜欢,咱们一起来学习一下吧!1.1 重载字符串显示1.1.1 str和repr
python调用prin()t时,自动调用str和repr,
python调用str()时,自动调用str和repr,
python调用repr()时,自动调用repr,不调用 str。
终端用str,开发时用repr。
自定义str和repr时,必须返回字符串。
>>> class MyAdd: def __init__(self,value=0): self.data=value def __add__(self,other): self.data+=other >>> class MyAddRepr(MyAdd): def __repr__(self): return 'MyAddRepr({})'.format(self.data) >>> ma=MyAdd(1) >>> print(ma) <__main__.MyAdd object at 0x03869C90> >>> mar=MyAddRepr(1) # print 自动调用 __repr__ >>> print(mar) MyAddRepr(1) # str repr 自动调用 __repr__ >>> str(mar),repr(mar) ('MyAddRepr(1)', 'MyAddRepr(1)') >>> class MyAddStr(MyAdd): def __str__(self): return 'MyAddStr({})'.format(self.data) >>> mas=MyAddStr(2) # print 自动调用 __str__ >>> print(mas) MyAddStr(2) # str 自动调用 __str__ # repr 不会调用 __str__ >>> str(mas),repr(mas) ('MyAddStr(2)', '<__main__.MyAddStr object at 0x03869CD0>') >>> class MyAddBoth(MyAdd): def __str__(self): return 'MyAddBothstr({})'.format(self.data) def __repr__(self): return 'MyAddBothrepr({})'.format(self.data) >>> mab=MyAddBoth(3) # print str 自动调用 __str__ # repr 自动调用 __repr__ >>> print(mab) MyAddBothstr(3) >>> str(mab),repr(mab) ('MyAddBothstr(3)', 'MyAddBothrepr(3)')1.1.2 自定义repr
当print对象在顶层时会调用自定义str,非顶层时调用默认调用内容或调用repr。
所以,建议自定义repr,来统一拦截print(),str(),repr()操作。
>>> class MyPrintStr: def __init__(self,val): self.val=val def __str__(self): return str(self.val) >>> class MyPrintRepr: def __init__(self,val): self.val=val def __repr__(self): return str(self.val) # 实例非顶层时print时用默认打印,或者repr,而不会用str >>> mpsl=[MyPrintStr(1),MyPrintStr(2)] >>> mprl=[MyPrintRepr(1),MyPrintRepr(2)] >>> print(mpsl) [<__main__.MyPrintStr object at 0x009F8370>, <__main__.MyPrintStr object at 0x009F8430>] >>> print(mprl) [1, 2]1.2 重载右侧和原处加法
1.2.1 radd
实例在加号左侧,自动调用 add,
实例在加号右侧,自动调用 radd,
>>> class MyRadd: def __init__(self,val): self.val = val def __add__(self,other): print('add',self.val,other) return self.val+other def __radd__(self,other): print('radd',self.val,other) return other+self.val >>> x=MyRadd(8) >>> y=MyRadd(9) # 实例 在加号左边, 自动调用 __add__ >>> x+1 add 8 1 9 # 实例 在加号右边, 自动调用 __radd__ >>> 1+y radd 9 1 10 # 两个实例相加时, 先调用 add 再调用 radd >>> x+y add 8 <__main__.MyRadd object at 0x00A23A30> radd 9 8 17 # return 类实例时,需要类型测试isinstance,避免嵌套循环 >>> class MyRaddIf: def __init__(self,val): self.val = val def __add__(self,other): print('add',self.val,other) if isinstance(other,MyRaddIf): other=other.val return MyRaddIf(self.val+other) def __radd__(self,other): print('radd',self.val,other) return MyRaddIf(other+self.val) def __repr__(self): return '<MyRaddIf:{}>'.format(self.val) >>> x=MyRaddIf(8) >>> y=MyRaddIf(9) >>> print(x+10) add 8 10 <MyRaddIf:18> >>> print(10+y) radd 9 10 <MyRaddIf:19> >>> z=x+y add 8 <MyRaddIf:9> >>> print(z) <MyRaddIf:17> #>>> print(z)#注释 if isinstance(other,MyRaddIf) 时,发生嵌套 #<MyRaddIf:<MyRaddIf:17>> >>> print(z+10) add 17 10 <MyRaddIf:27> >>> print(z+z) add 17 <MyRaddIf:17> <MyRaddIf:34> >>> class MyRadd: def __init__(self,val): self.val = val def __add__(self,other): print('add',self.val,other) return self.val+other >>> x=MyRadd(8) >>> x+1 add 8 1 9 # 没有radd时,实例在右侧会报错 >>> 1+x Traceback (most recent call last): File "<pyshell#127>", line 1, in <module> 1+x TypeError: unsupported operand type(s) for +: 'int' and 'MyRadd'
1.2.2 iadd
python的+=优先调用iadd_,没有再调用_add__。
>>> class MyIadd: def __init__(self,val): self.val=val def __iadd__(self,other): self.val+=other return self # += 调用 __add__ >>> x=MyIadd(5) >>> x+=1 >>> x.val 6 >>> class MyIadd: def __init__(self,val): self.val=val def __add__(self,other): self.val+=other return self # += 调用 __add__ >>> x=MyIadd(5) >>> x+=1 >>> x.val 6 >>> class MyIadd: def __init__(self,val): self.val=val def __add__(self,other): print('__add__') self.val+=other return self def __iadd__(self,other): print('__iadd__') self.val+=other return self # += 优先调用 __iadd__ >>> x=MyIadd(5) >>> x+=1 __iadd__
2 END
本文首发微信公众号:梯阅线条,
更多内容参考python知识分享或软件测试开发目录。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #python字符串加减 #字符串数字加法