class Queue:
queue_list: list
def __init__(self, *args: int) -> None:
self.queue_list = list(args)
...
def __rrshift__(self, i: int) -> Queue:
result: Queue = self.copy()
try:
result.queue_list = self.queue_list[i:]
except IndexError:
pass
return result
q3 = Queue(2, 3, 4, 5)
q4 = Queue(1, 2)
q4 = q3 >> 4
print(q4)
File "c:\...\test.py", line 19, in <module>
q4 = q3 >> 4
TypeError: unsupported operand type(s) for >>: 'Queue' and 'int'
>>Queue()如果可能,必須回傳 newself.queue_list[i:]否則 clear Queue()。
錯誤是什么?
uj5u.com熱心網友回復:
__rrshift__實作Queue實體位于運算子右側的>>操作。
為了能夠使用q3 >> 4,Queue您需要實作左側的a __rshift__。
語法a >> b等價于a.__rshift__(b). 如果沒有為a它查找的物件定義此方法b.__rrshift__(a),即附加r前綴代表反向運算子。
所以在你的情況下q3 >> 4需要q3.__rshift__(4)。
如果你已經實作了__rrshift__,你可以這樣做4 >> q3,因為int.__rshift__沒有用Queueas 引數定義(更準確地說它會引發NotImplemented例外),所以它然后使用q3.__rrshift__(4).
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448957.html
上一篇:繼承自模板引數的Dart模板類
