【发布时间】:2020-05-17 19:45:14
【问题描述】:
我正在看一本书,这里有这个例子(关于 Python 中的重载运算符):
class MyClass:
def __init__(self, *args):
self.Input = args
def __add__(self, Other):
Output = MyClass()
Output.Input = self.Input + Other.Input
return Output
def __str__(self):
Output = ""
for Item in self.Input:
Output += Item
Output += " "
return Output
Value1 = MyClass("Red", "Green", "Blue")
Value2 = MyClass("Yellow", "Purple", "Cyan")
Value3 = Value1 + Value2
print("{0} + {1} = {2}"
.format(Value1, Value2, Value3))
只是为了强调,这里是输出:
Red Green Blue + Yellow Purple Cyan = Red Green Blue Yellow Purple Cyan
所以,我知道这里会发生什么,但有一件事我无法理解。 Value 1 和 Value 2 对象给“*args”两个元组,然后,代码将“args”放入self.Input,就可以了。但是,从 add 方法开始,参数“Other”接收第二个元组(“Yellow”、“Purple”、“Cyan”),这个元组首先在 self.Input 变量上。为了证明这一点,您可以在构造函数中使用 print() 语句和 add 方法,并且您可以证明变量中的内容发生了变化。如果有任何 Python 程序员可以向我解释为什么会发生这种情况,我会很高兴。对不起,如果它不是那么容易理解,因为英语不是我的第一语言。
再次强调一下,例如:如果您在 init 方法中输入“print (self.Input)”,您将能够看到它包含两个元组 (RGB AND YPC),但是,如果你在 add 方法中输入“print (self.Input)”,它将只打印 RGB 元组,而 YPC 元组将位于“Other.Input” ,出于某种原因,我不知道,基本上,这是我的问题:为什么 self.Input 在构造函数方法中有两个元组,但是,在 'add' 方法中,它是不再了吗?
【问题讨论】:
-
Value1仍然是 RGB,Value2仍然是 YPC。哪个变量的内容发生了变化? -
YPC 确实仍然分配给
self.Input,但在Value2对象内。添加对象Value1和Value2后,Python 的数据模型确保Value1的__add__()函数以Value2作为(Other) 参数调用。这有意义吗? -
嗨,MarkM,我差点就明白了,但我还不清楚,很抱歉,你能详细解释一下吗?
标签: python oop operators overloading