什么是运算符重载 python

什么是运算符重载 python


心有法竹
浏览 720回答 3
3回答

临摹微笑

example (Buffer support << , Fee support + / +=)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#!/usr/bin/env&nbsp;python#&nbsp;coding:&nbsp;utf-8&nbsp;class&nbsp;Buffer(object):&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.buffer&nbsp;=&nbsp;[]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__lshift__(self,&nbsp;data):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.buffer.append(data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__str__(self):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;repr(self.buffer)&nbsp;&nbsp;class&nbsp;Fee(object):&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,&nbsp;qty=0,&nbsp;amount=0):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.qty&nbsp;=&nbsp;qty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.amount&nbsp;=&nbsp;amount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__radd__(self,&nbsp;another):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self&nbsp;if&nbsp;not&nbsp;another&nbsp;else&nbsp;self&nbsp;+&nbsp;another&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__add__(self,&nbsp;another):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Fee(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qty=self.qty&nbsp;+&nbsp;another.qty,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount=self.amount&nbsp;+&nbsp;another.amount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__repr__(self):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"%s(%s)"&nbsp;%&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.__class__.__name__,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',&nbsp;'.join([&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'%s=%r'&nbsp;%&nbsp;item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;item&nbsp;in&nbsp;self.__dict__.items()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;def&nbsp;tester():&nbsp;&nbsp;&nbsp;&nbsp;buff&nbsp;=&nbsp;Buffer()&nbsp;&nbsp;&nbsp;&nbsp;buff&nbsp;<<&nbsp;Fee(1,&nbsp;23.5)&nbsp;<<&nbsp;Fee(23,&nbsp;1023.23)&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;sum(buff.buffer)&nbsp;&nbsp;if&nbsp;__name__&nbsp;==&nbsp;"__main__":&nbsp;&nbsp;&nbsp;&nbsp;tester()&nbsp;

偶然的你

自定义类在+右边的时候,需要定义 __radd__(self, other) 方法。如果左侧的obj没有定义__add__,那么python会自动调用右侧obj的__radd__。其它运算符也是这样的。都是前面加个r表示右侧,例如__rmul__

不负相思意

class indexer:def __getitem__(self, index): #iter overridereturn index ** 2X = indexer()X[2]for i in range(5):print X[i]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python