I am new in coding Python and I was wondering why do I need to set my attribute parameters equal to ‘None’ for my code to work properly. Any advice is welcome!
Thank you very much for your help! I appreciate it!
class Shape:
# I need to set w = None and h = None. Why can't I just use (self, w, h)
def __init__(self, w = None, h = None):
self.width = w
self.height = h
def area(self):
return self.width*self.height
def __add__(self, other):
shp = Shape()
shp.width = self.width + other.width
shp.height = self.height + other.height
return shp
def __gt__(self, other):
a1 = self.width*self.height
a2 = other.width*other.height
return a1 > a2
w1 = int(input())
h1 = int(input())
w2 = int(input())
h2 = int(input())
s1 = Shape(w1, h1)
s2 = Shape(w2, h2)
result = s1 + s2
print(result.area())
print(s1 > s2)
>Solution :
It is because you create an instance of your class Shape in the function add -> shp = Shape() without passing w and h to it. There you get an error because your class Shape expects these two arguments w and h which there aren’t. If you create your class with def __init__(self, w = None, h = None): then w and h get a default value (-> None) if they aren’t passed as parameter (they become optional) and creating an instance like shp = Shape() without passing w and h would be possible.
I hope my explanation is understandable.
Try to do it like this:
class Shape:
def __init__(self, w, h):
self.width = w
self.height = h
def area(self):
return self.width * self.height
def __add__(self, other):
return Shape(self.width + other.width, self.height + other.height)
def __gt__(self, other):
a1 = self.width * self.height
a2 = other.width * other.height
return a1 > a2
w1 = int(input())
h1 = int(input())
w2 = int(input())
h2 = int(input())
s1 = Shape(w1, h1)
s2 = Shape(w2, h2)
result = s1 + s2
print(result.area())
print(s1 > s2)