Python 方法运算符重载
Python如何选择使用方法重载的对象 例如:Python 方法运算符重载,python,overloading,operator-keyword,Python,Overloading,Operator Keyword,Python如何选择使用方法重载的对象 例如: class a: def __init__(self, other): self.data = other def __add__(self, other): return self.data + other def __radd__(self,other): return self.data + other X = a(1) X+1 1+X 为什么在X+1表达式中,在左侧
class a:
def __init__(self, other):
self.data = other
def __add__(self, other):
return self.data + other
def __radd__(self,other):
return self.data + other
X = a(1)
X+1
1+X
为什么在X+1
表达式中,在左侧的对象中调用一个方法\uuuuuuuuuuuuuuuu
,在右侧的对象中调用表达式1+X
方法\uuuuuuuuuuuu
X+1
第一,呼吁:
X.__add__(1)
这是成功的,因此不需要进一步的工作
另一方面,这:
1+X
召唤
这会失败,因为int
不知道如何与类a
接口。“作为最后的手段”,这是尝试:
X.__radd__(1)
从:
仅当左操作数不支持相应的操作且操作数类型不同时,才会调用这些函数
第一,呼吁:
X.__add__(1)
这是成功的,因此不需要进一步的工作
另一方面,这:
1+X
召唤
这会失败,因为int
不知道如何与类a
接口。“作为最后的手段”,这是尝试:
X.__radd__(1)
从:
仅当左操作数不支持相应的操作且操作数类型不同时,才会调用这些函数
第一,呼吁:
X.__add__(1)
这是成功的,因此不需要进一步的工作
另一方面,这:
1+X
召唤
这会失败,因为int
不知道如何与类a
接口。“作为最后的手段”,这是尝试:
X.__radd__(1)
从:
仅当左操作数不支持相应的操作且操作数类型不同时,才会调用这些函数
第一,呼吁:
X.__add__(1)
这是成功的,因此不需要进一步的工作
另一方面,这:
1+X
召唤
这会失败,因为int
不知道如何与类a
接口。“作为最后的手段”,这是尝试:
X.__radd__(1)
从:
仅当左操作数不支持相应的操作且操作数类型不同时,才会调用这些函数
在
1+X
的情况下,您是指\uuuuu radd\uuuu
?因为你写了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你读了吗?user2494676先生,请检查你的问题,我们相信你读错了@SethMMorton的评论。你是说1+X
案例中的\uuuuuuuuuuuuuu?因为你写了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你读了吗?user2494676先生,请检查你的问题,我们相信你读错了@SethMMorton的评论。你是说1+X
案例中的\uuuuuuuuuuuuuu?因为你写了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你读了吗?user2494676先生,请检查你的问题,我们相信你读错了@SethMMorton的评论。你是说1+X
案例中的\uuuuuuuuuuuuuu?因为你写了。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!这有助于避免违背我的意愿tangent@thefourtheye请问为什么一定要有()
?为什么它不像“”。join(['a',b'])
?@zhangxaochen否则解析器认为1.
是浮点数的开头,但\uu
在浮点数中无效。这就是为什么我们必须显式地让Python分别计算1
。@thefourtheye哦,我没有注意到这一点。但是既然数字不能作为方法名的开头,为什么解析器不能区分浮点数和方法调用呢?仅供参考,print(1)。\uuu add\uuu(10)
将打印11
。啊,是的,括号!这有助于避免违背我的意愿tangent@thefourtheye请问为什么一定要有()
?为什么它不像“”。join(['a',b'])
?@zhangxaochen否则解析器认为1.
是浮点数的开头,但\uu
在浮点数中无效。这就是为什么我们必须显式地让Python分别计算1
。@thefourtheye哦,我没有注意到这一点。但是既然数字不能作为方法名的开头,为什么解析器不能区分浮点数和方法调用呢?仅供参考,print(1)。\uuu add\uuu(10)
将打印11
。啊,是的,括号!这有助于避免违背我的意愿tangent@thefourtheye请问为什么一定要有()
?为什么它不像“”。join(['a',b'])
?@zhangxaochen否则解析器认为1.
是浮点数的开头,但\uu
在浮点数中无效。这就是为什么我们必须显式地让Python分别计算1
。@thefourtheye哦,我没有注意到这一点。但是既然数字不能作为方法名的开头,为什么解析器不能区分浮点数和方法调用呢?仅供参考,print(1)。\uuu add\uuu(10)
将打印11
。啊,是的,括号!这有助于避免违背我的意愿tangent@thefourtheye请问为什么一定要有()
?为什么它不像“”。join(['a',b'])
?@zhangxaochen否则解析器认为1.
是浮点数的开头,但\uu
在浮点数中无效。这就是为什么我们必须显式地让Python分别计算1
。@thefourtheye哦,我没有注意到这一点。但是既然数字不能作为方法名的开头,为什么解析器不能区分浮点和方法调用呢?