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()}'