I keep getting an attribute error is this

Question:

Create a class called Point.

The point should have two attributes:

Attribute Name      Description
x             x-coordinate of the point
y             y-cordinate of the point

You should override the init(), str(), add(), sub() and mul() methods
but my add sub and mul methods keep getting an attribute error
AttributeError: ‘str’ object has no attribute ‘x’
how do i correct this error?

class Point: 
  def __init__(self,x,y):
    self.x=x
    self.y=y

  def __str__(self):
    return_string = "Instance of Pointnn"
    return_string += f"x: {self.x}ny: {self.y}"
    return return_string

  def __add__(self, other):
    print("Instance of Pointn")
    return(f"x: {self.x + other.x}ny: {self.y + other.y}")
    return

  def __sub__(self,other):
    print("Instance of Pointn")
    return(f"x: {self.x - other.x}ny: {self.y-other.y}")

  def __mul__(self, other):
    print("Instance of Pointn")
    return(f"x: {self.x * other.x}ny: {self.y * other.y}")

  def __eq__(self, other):
    if self.x == other.x and self.y == other.y:
      return True
    else:
      return False

  """ A simple representation of a point in 2d space"""
  pass


if __name__ == "__main__":
  point_one = Point(3,2)
  print(point_one)
  print()
  point_two = Point(5,3)
  print(point_two)
  print()
  point_three = point_one + point_two
  print(point_three)
  print()
  point_four = point_one - point_two
  print(point_four)
  print()
  point_five = point_one * point_two
  print(point_five)
  print()
  print(point_one == point_two) # prints False

Answers:

If you want a new Point object, you must create a new objects in your Operator overloaded methods such as __add__ , __sub__ , __mul__

Eg :

 def __add__(self, other):
    print("Instance of Pointn")
    newPoint = Point(self.x + other.x, self.y + other.y)
    return newPoint
Answered By: Hari E
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.