-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path9-rectangle.py
More file actions
executable file
·199 lines (125 loc) · 3.97 KB
/
Copy path9-rectangle.py
File metadata and controls
executable file
·199 lines (125 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#!/usr/bin/python3
"""
This module is composed by a class that defines a Rectangle
"""
class Rectangle:
""" Class that defines a rectangle """
number_of_instances = 0
print_symbol = "#"
def __init__(self, width=0, height=0):
""" Method that initializes the instance
Args:
width: rectangle width
height: rectangle height
"""
self.width = width
self.height = height
Rectangle.number_of_instances += 1
@property
def width(self):
""" method that returns the value of the width
Returns:
rectangle width
"""
return self.__width
@width.setter
def width(self, value):
""" method that defines the width
Args:
value: width
Raises:
TypeError: if width is not an integer
ValueError: if width is less than zero
"""
if not isinstance(value, int):
raise TypeError("width must be an integer")
if value < 0:
raise ValueError("width must be >= 0")
self.__width = value
@property
def height(self):
""" method that returns the value of the height
Returns:
rectangle height
"""
return self.__height
@height.setter
def height(self, value):
""" method that defines the height
Args:
value: height
Raises:
TypeError: if height is not an integer
ValueError: if height is less than zero
"""
if not isinstance(value, int):
raise TypeError("height must be an integer")
if value < 0:
raise ValueError("height must be >= 0")
self.__height = value
def area(self):
""" Method that calculates the Rectangle area
Returns:
rectangle area
"""
return self.width * self.height
def perimeter(self):
""" Method that calculates the Rectangle perimeter
Returns:
rectangle perimeter
"""
if self.width == 0 or self.height == 0:
return 0
return (2 * self.width) + (2 * self.height)
def __str__(self):
""" Method that returns the Rectangle #
Returns:
str of the rectangle
"""
rectangle = ""
if self.width == 0 or self.height == 0:
return rectangle
for i in range(self.height):
rectangle += (str(self.print_symbol) * self.width) + "\n"
return rectangle[:-1]
def __repr__(self):
""" Method that returns the string represantion of the instance
Returns:
string represenation of the object
"""
return "Rectangle({:d}, {:d})".format(self.width, self.height)
def __del__(self):
""" Method that prints a message when the instance is deleted
"""
Rectangle.number_of_instances -= 1
print("Bye rectangle...")
@staticmethod
def bigger_or_equal(rect_1, rect_2):
""" Method that returns the bigger Rectangle
Args:
rect_1: Rectangle 1
rect_2: Rectangle 2
Raises:
TypeError: when some argument passed is not
an instance of the Rectangle class
Returns:
The bigger Rectangle
"""
if not isinstance(rect_1, Rectangle):
raise TypeError("rect_1 must be an instance")
if not isinstance(rect_2, Rectangle):
raise TypeError("rect_2 must be an instance")
if rect_1.area() >= rect_2.area():
return rect_1
else:
return rect_2
@classmethod
def square(cls, size=0):
""" Method that returns a new instance of Rectangle class
Args:
cls: rectangle class
size: rectangle width and rectangle height
Returns:
a new instance of Rectangle class
"""
return cls(size, size)