Apr-01-2024, 03:34 PM
(This post was last modified: Apr-01-2024, 06:01 PM by deanhystad.)
Remember that variables are not objects in Python, they are references to objects. "p3 = Punkt()" creates a variable named "p3" and assigns it the newly created Punkt() object. When you call p3.add(p1, p1), self is a variable inside the method/function Punkt.add(). Initially it references the same object referenced by p3. When you assign a new value to self inside of add() (self = Punkt()), self no longer refers to the same object as p3. Changes made to self will not affect p3. Your function returns the new Punkt object, but you ignore the return value.
Your code would work if you wrote: p3 = p3.add(p1, p2). This reassigns p3 to refer to the new object that was created in add(). Another way to fix this is what you did by accident. Don't reassign self so it continues to refer to the same object as p3. Changes made to self are not changes made to p3, because they both reference the same object (changes are actually made to the object, not to self or p3).
But that is not what you want to do. You want to override the + operator.
Your code would work if you wrote: p3 = p3.add(p1, p2). This reassigns p3 to refer to the new object that was created in add(). Another way to fix this is what you did by accident. Don't reassign self so it continues to refer to the same object as p3. Changes made to self are not changes made to p3, because they both reference the same object (changes are actually made to the object, not to self or p3).
But that is not what you want to do. You want to override the + operator.
class Punkt(): def __init__(self, x=0, y=0): self.x = x self.y = y def __str__(self): return f'( {self.x} | {self.y} )' def __add__(self, p2): """Override the + operator.""" return Punkt(self.x + p2.x, self.y + p2.y) p1 = Punkt(17, 12) p2 = Punkt(-9,-4) p3 = p1 + p2 print(f"Punkt 3: {p3}")
Output:Punkt 3: ( 8 | 8 )