Python Forum

Full Version: operator overloading won't work
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

When i run this code i get
(0) + (1) = (2)
while i should get
Rood Groen Blauw + Geel Paars Cyaan = Rood Groen Blauw Geel Paars Cyaan
What am i doing wrong?
Any input is much appreciated!


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("Rood", "Groen", "Blauw")
Value2 = MyClass("Geel", "Paars", "Cyaan")
Value3 = Value1 + Value2

print("(0) + (1) = (2)"
        .format(Value1, Value2, Value3))
First lets do the format problem. You need to use curly brackets instead of parenthesis in your format string. This is an easy mistake to make when copying code. Depending on the font, {} can look a lot like ().
print("{0} + {1} = {2}".format('a', 'b', 'c'))
Your operator overloading code doesn't work because you use Self instead of self in method __add___. When I ran your code Python told me exactly what and where the error was.
Output:
Traceback (most recent call last): File "C:\Users\djhys\Documents\python\musings\junk.py", line 21, in <module> print("{0} + {1} = {2}" File "C:\Users\djhys\Documents\python\musings\junk.py", line 12, in __str__ for Item in Self.Input: NameError: name 'Self' is not defined