Home > Blockchain >  unsupported operand type(s) for >>: 'Queue' and 'int' after implementing &
unsupported operand type(s) for >>: 'Queue' and 'int' after implementing &

Time:03-24

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'

>> must return new Queue() with self.queue_list[i:] if it possible else clear Queue().

What is the error?

CodePudding user response:

__rrshift__ implements the operation where a Queue instance is on the right-hand side of the >> operator.

In order to be able to use q3 >> 4, where a Queue is on the left-hand side you need to implement __rshift__.


The syntax a >> b is equivalent to a.__rshift__(b). If this method isn't defined for the object a it then looks up b.__rrshift__(a), i.e. the additional r prefix stands for reverse operator.

So in your case q3 >> 4 needs q3.__rshift__(4).

If you have implemented __rrshift__ you can do 4 >> q3, because int.__rshift__ isn't defined with a Queue as argument (to be more precise it raises a NotImplemented exception), so it then uses q3.__rrshift__(4).

  • Related