-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path6-rectangle.py
executable file
·165 lines (117 loc) · 3.62 KB
/
6-rectangle.py
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
#!/usr/bin/python3
"""6. How many instances
This module defines a class Rectangle
"""
class Rectangle:
"""class Rectangle
A class that has 2 private attributes (height & width).
Attributes:
__width (int): The width of the rectangle.
__height (int): The height of the rectangle.
"""
__width = None
__height = None
number_of_instances = 0
def __init__(self, width=0, height=0):
"""Rectangle constructor
The default class constructor.
Args:
width (int): The width of the rectangle.
height (int): The height of the rectangle.
"""
if type(width) is not int:
raise TypeError("width must be an integer")
if width < 0:
raise ValueError("width must be >= 0")
if type(height) is not int:
raise TypeError("height must be an integer")
if height < 0:
raise ValueError("height must be >= 0")
self.__width = width
self.__height = height
Rectangle.number_of_instances += 1
def __str__(self):
"""Prints the rectangle
Prints the rectangle using '#'
Return:
(string): The rectangle in '#'.
"""
shape = ""
if self.__height == 0 or self.__width == 0:
return ''
for i in range(self.__height):
for j in range(self.__width):
shape = shape + '#'
if i < (self.__height - 1):
shape = shape + '\n'
return shape
def __repr__(self):
"""repr
Returns a string representation of the rectangle.
Return:
(string): Represenation of the rectangle.
"""
return ("Rectangle({:d}, {:d})".format(
eval(str(self.__width)), eval(str(self.__height))))
@property
def width(self):
"""width getter
Gets the width's value.
Return:
(int): The width.
"""
return self.__width
def __del__(self):
"""del
The default class deconstructor.
"""
print("Bye rectangle...")
Rectangle.number_of_instances -= 1
@width.setter
def width(self, value):
"""width setter
Sets the width's value.
Args:
value (int): The value to be assigned to the width.
"""
if type(value) is not int:
raise TypeError("width must be an integer")
if value < 0:
raise ValueError("width must be >= 0")
self.__width = value
@property
def height(self):
"""height getter
Gets the height's value.
Return:
(int): The height.
"""
return self.__height
@height.setter
def height(self, value):
"""height setter
Sets the height's value.
Args:
value (int): The value to be assigned to the height.
"""
if type(value) is not int:
raise TypeError("height must be an integer")
if value < 0:
raise ValueError("height must be >= 0")
self.__height = value
def area(self):
"""area
Calculates the area of the rectangle & returns it.
Return:
(int): The area of the rectangle.
"""
return self.__height * self.__width
def perimeter(self):
"""perimeter
Calculates the perimeter of the rectangle & returns it.
Return:
(int): The perimeter of the rectangle.
"""
if self.__width == 0 or self.height == 0:
return 0
return 2 * (self.__height + self.__width)