-
Notifications
You must be signed in to change notification settings - Fork 0
/
6_add_properties_to_a_class.py
90 lines (69 loc) · 2.46 KB
/
6_add_properties_to_a_class.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
# Explain why the @property syntax is preferred in Python over getters, setters, and property().
"""
The standard attribute access is the normal, Pythonic way of accessing attributes.
The advantage of properties is that they are syntactically identical to attribute access, so you can change from one to another.
"""
# Submit the two versions of the modified class. Remember to perform some validations in the setters.
# First
class BouncyBall:
def __init__(self, price, size, brand):
self._price = price
self._size = size
self._brand = brand
def get_price(self):
return self._price
def set_price(self, new_price):
if isinstance(new_price, float) and new_price > 0:
self._price = new_price
else:
print("Please enter a valid price.")
price = property(get_price, set_price)
def get_size(self):
return self._size
def set_size(self, new_size):
if isinstance(new_size, int):
self._size = new_size
else:
print("Please introduce a valid size.")
size = property(get_size, set_size)
def get_brand(self):
return self._brand
def set_brand(self, new_brand):
if isinstance(new_brand, str) and new_brand.isalpha():
self._brand = new_brand
else:
print("Please introduce a valid new brand.")
brand = property(get_brand, set_brand)
# Second
class BouncyBall:
def __init__(self, price, size, brand):
self._price = price
self._size = size
self._brand = brand
@property
def price(self):
return self._price
@property
def size(self):
return self._size
@property
def brand(self):
return self._brand
@price.setter
def price(self, new_price):
if isinstance(new_price, float) and new_price > 0:
self._price = new_price
else:
print("Please enter a valid price.")
@size.setter
def size(self, new_size):
if isinstance(new_size, int):
self._size = new_size
else:
print("Please introduce a valid size.")
@brand.setter
def brand(self, new_brand):
if isinstance(new_brand, str) and new_brand.isalpha():
self._brand = new_brand
else:
print("Please introduce a valid new brand.")