Home > Software engineering >  Unexpected representation for class's instance
Unexpected representation for class's instance

Time:09-29

I have following code:

class Point:
    def __init__(self, x, y):
         self.x = x
         self.y = y
    
    @classmethod
    def zero(cls):
         return cls(0, 0)


point = Point.zero()

I am not getting the expected output: Point(0, 0).

CodePudding user response:

you are getting the correct Point object. To confirm, print type(point) and print point.x or point.y. But its representation defaults to what object.__repr__ provides(all classes inherit this from object class). Implement your own __str__ or __repr__. (See the difference here):

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

    @classmethod
    def zero(cls):
        return cls(0, 0)

    def __repr__(self) -> str:
        return f"Point{self.x, self.y}"


point = Point.zero()
print(point)

CodePudding user response:

You do, but what you generate is a Class Object:

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

    @classmethod
    def zero(cls):
        return cls(0, 0)

origin = Point.zero()

origin.x -> 0
origin.y -> 0
  • Related