Python commutative operator override

前端 未结 1 992
醉话见心
醉话见心 2020-12-17 18:41

Hi I was wondering if there is a way to do a symmetric operator override in Python. For example, let\'s say I have a class:

class A:
    def __init__(self, v         


        
相关标签:
1条回答
  • 2020-12-17 19:36

    Just implement an __radd__ method in your class. Once the int class can't handle the addition, the __radd__ if implemented, takes it up.

    class A(object):
        def __init__(self, value):
            self.value = value
    
        def __add__(self, other):
            if isinstance(other, self.__class__):
                return self.value + other.value
            else:
                return self.value + other
    
        def __radd__(self, other):
            return self.__add__(other)
    
    
    a = A(1)
    print a + 1
    # 2
    print 1 + a
    # 2
    

    For instance, to evaluate the expression x - y, where y is an instance of a class that has an __rsub__() method, y.__rsub__(x) is called if x.__sub__(y) returns NotImplemented.

    Same applies to x + y.

    On a side note, you probably want your class to subclass object. See What is the purpose of subclassing the class "object" in Python?

    0 讨论(0)
提交回复
热议问题