Python 我能';我不理解这个关于重载运算符的示例
我正在读一本书,这里有一个例子(关于Python中的重载运算符): 为了突出显示,以下是输出:Python 我能';我不理解这个关于重载运算符的示例,python,oop,operators,overloading,Python,Oop,Operators,Overloading,我正在读一本书,这里有一个例子(关于Python中的重载运算符): 为了突出显示,以下是输出: Red Green Blue + Yellow Purple Cyan = Red Green Blue Yellow Purple Cyan 所以,我知道这里发生了什么,但有一件事我不明白。Value 1和Value 2对象为“*args”提供两个元组,然后,代码将“args”放在self.Input中,这样就可以了。但是,从添加方法开始,参数“Other”接收第二个元组(“Yellow”、“
Red Green Blue + Yellow Purple Cyan = Red Green Blue Yellow Purple Cyan
所以,我知道这里发生了什么,但有一件事我不明白。Value 1和Value 2对象为“*args”提供两个元组,然后,代码将“args”放在self.Input中,这样就可以了。但是,从添加方法开始,参数“Other”接收第二个元组(“Yellow”、“Purple”、“Cyan”),该元组位于self.Input变量上。为了证明这一点,只需在构造函数中使用print()语句和add方法,就可以确定变量中的内容发生了变化。如果有任何Python程序员能向我解释为什么会发生这种情况,我会很高兴。我很抱歉,如果它不是那么容易理解,因为英语不是我的第一语言
再次强调,例如:如果在init方法中放置“print(self.Input)”,您将能够看到它包含两个元组(RGB和YPC),但是,如果在add方法中放置“print(self.Input)”,它将只打印RGB元组,而YPC元组将位于“Other.Input”,出于某种原因,我不知道,基本上,这就是我的问题:为什么self.Input在构造函数方法中有两个元组,但在“add”方法中,它不再有了 不确定您的问题到底是什么,但这就是
\uuuuuuuuuuuuuuuuuuuuu
方法的工作原理。每当您使用
+
运算符时,它都会从左操作数调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
正确的操作数将作为参数传入
因此,当执行Value1+Value2
时,python:
从Value1
调用\uuuu添加\uuuu
方法,并将Value1
分配给self
Value2
被传递到方法并被分配到Other
参数
不确定您的问题到底是什么,但这就是\uuuu添加\uuuu
方法的工作原理。
每当您使用+
运算符时,它都会从左操作数调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
正确的操作数将作为参数传入
因此,当执行Value1+Value2
时,python:
从Value1
调用\uuuu添加\uuuu
方法,并将Value1
分配给self
Value2
被传递到方法并被分配到Other
参数
通过向代码中添加打印
,您可以看到在执行\uu添加
时,哪个实例是自身
,哪个实例是其他
:
class MyClass:
def __init__(self, *args: str):
self.input = args
def __add__(self, other: 'MyClass'):
print(f"Adding {self} to {other}")
return MyClass(*(self.input + other.input))
def __str__(self) -> str:
return " ".join(self.input)
value1 = MyClass("Red", "Green", "Blue")
value2 = MyClass("Yellow", "Purple", "Cyan")
value3 = value1 + value2
print(f"{value1} + {value2} = {value3}")
印刷品:
Adding Red Green Blue to Yellow Purple Cyan
Red Green Blue + Yellow Purple Cyan = Red Green Blue Yellow Purple Cyan
因此,当您调用value1+value2
时,与您所说的value1.\uuuu添加\uuuu(value2)
相同。other
参数是value2
(其中包含黄紫色
),而self
是value1
(其中包含红绿色
).通过向代码添加打印
,您可以看到在执行\uu添加
时,哪个实例是自身
,哪个实例是其他
:
class MyClass:
def __init__(self, *args: str):
self.input = args
def __add__(self, other: 'MyClass'):
print(f"Adding {self} to {other}")
return MyClass(*(self.input + other.input))
def __str__(self) -> str:
return " ".join(self.input)
value1 = MyClass("Red", "Green", "Blue")
value2 = MyClass("Yellow", "Purple", "Cyan")
value3 = value1 + value2
print(f"{value1} + {value2} = {value3}")
印刷品:
Adding Red Green Blue to Yellow Purple Cyan
Red Green Blue + Yellow Purple Cyan = Red Green Blue Yellow Purple Cyan
因此,当您调用value1+value2
时,与您所说的value1.\uuuu添加\uuuu(value2)
相同。other
参数是value2
(包含黄紫青色
),而self
是value1
(包含红绿蓝
)。value1
仍然是RGB,value2
仍然是YPC。哪个变量的内容已更改?YPC确实仍分配给self.Input
,但在Value2
对象内。一旦添加了对象Value1
和Value2
,Python的数据模型将确保Value1
的\uuuuuuuuuuuuu()
函数以Value2
作为(Other
)参数调用。这有意义吗?嘿,马克,我差点就明白了,但我还不清楚,对不起,你能详细解释一下吗?Value1
仍然是RGB,Value2
仍然是YPC。哪个变量的内容已更改?YPC确实仍分配给self.Input
,但在Value2
对象内。一旦添加了对象Value1
和Value2
,Python的数据模型将确保Value1
的\uuuuuuuuuuuuu()
函数以Value2
作为(Other
)参数调用。这有意义吗?嘿,马克,我差不多明白了,但我还不清楚,对不起,你能解释更多细节吗?谢谢你,伙计,我是初学者,所以我不熟悉这东西,但谢谢你。谢谢你,伙计,我是初学者,所以我不熟悉这东西,但谢谢你。