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”、“

我正在读一本书,这里有一个例子(关于Python中的重载运算符):

为了突出显示,以下是输出:

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
    )参数调用。这有意义吗?嘿,马克,我差不多明白了,但我还不清楚,对不起,你能解释更多细节吗?谢谢你,伙计,我是初学者,所以我不熟悉这东西,但谢谢你。谢谢你,伙计,我是初学者,所以我不熟悉这东西,但谢谢你。