When we are over-riding the init() of Rectangle ,then why can’t we put both length,height arguments .Try putting both the arguments once.It returns error
class Rectangle():
def __init__(self,length,height):
self.length = length
self.height = height
def area(self):
return self.length * self.height
def __repr__(self):
print(f"{self.area()}")
rect_obj = Rectangle(3,4)
#print(rect_obj)
class Square(Rectangle):
def __init__(self,length,height):
super(Square,self).__init__(self,length) #When we are over-riding the __init__() of Rectangle ,then why can't we put both length,height arguments .
self.length = length
self.height = height
square_obj = Square(2,4)
print(square_obj.area())
This means that when you have a square, the init for the rectangle has been replaced and is no longer valid. Otherwise, you could make a ‘square’ with mismatched height and length, which shouldn’t be possible.
Notice that in Python, methods internal to an object have an extra argument, self. But when you call those methods outside of the object, like above, you don’t include this argument.
Now lets look at your attempt to make a square class
When calling the rectangle class constructor, you only need to call with two arguments, length and height. You should not be calling super(Square,self).__init__ with the self argument.
As a note, your constructor for the square should only have a single argument, as the length == height on a square.