Home > Back-end >  str method not printing correctly
str method not printing correctly

Time:09-21

I'm working on creating a subclass Rug from a parent class rectangle for school. Everything looks like it should be working but when I try to print the __str__ method for the subclass the only that populates from the parent class is <__main__.Rug object at 0x0000019C2B69C400>.

This is my Parent Class

import math

class Rectangle:

def __init__(self, l, w):
    self.setLength(l)
    self.setWidth(w)
    
def getLength(self):
    return self.__length

def setLength(self, l):
    if l < 0:
        l = 1
    self.__length = l

def getWidth(self):
    return self.__width

def setWidth(self, w):
    if w < 0:
        w = 1
    self.__width = w

def getArea(self):
    return self.__length * self.__width

This is my Rug subclass

class Rug(Rectangle):

    def __init__(self, l, w, p):
        super().__init__(l, w)
        self.__price = p

    def getPrice(self):
        return self.__price

    def __str__(self):
        return super().__str__()   ", Area: "   str(self.getArea())   ", Price: "   str(self.getPrice())

def main ():
    r = Rug(float(input("Please enter length: ")), float(input("Please enter width: ")), 150)
    print(r)

main()

This is all in Python 3

This is my first time asking a question on here so if I need to provide anymore information like the code for my Rectangle parent class please let me know.

Any help would be appreciated!

CodePudding user response:

Is a __str__(self) implemented in the base class? If assuming your Rectange looks like the following:

class Rectangle():

    def __init__(self, l, w):
        self.length = l
        self.width = w

    def getArea(self):
        return self.length * self.width

    def __str__(self):
        return f'Rug {self.length}x{self.width}'

Your code would print the base function's string representation defined by it's __str__() function.

You could use f-string interpolation to clean up your Rug.__str__() as well:

class Rug(Rectangle):
    ...
    ...
    def __str__(self):
        return f'{super().__str__()}, Area: {self.getArea()}, Price: {self.getPrice()}'
  • Related