Skip to content

Commit ea5be02

Browse files
authored
Merge pull request #321 from realpython/python-getter-setter
Add code examples for the getter and setter article
2 parents e99fde1 + 00dfce2 commit ea5be02

File tree

11 files changed

+172
-0
lines changed

11 files changed

+172
-0
lines changed

python-getter-setter/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Getters and Setters: Manage Attributes in Python
2+
3+
This folder provides the code examples for the article [Getters and Setters: Manage Attributes in Python](https://realpython.com/python-getter-setter/).

python-getter-setter/employee.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Employee:
2+
def __init__(self, name, birth_date):
3+
self.name = name
4+
self.birth_date = birth_date

python-getter-setter/employee2.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from datetime import date
2+
3+
4+
class Employee:
5+
def __init__(self, name, birth_date):
6+
self.name = name
7+
self.birth_date = birth_date
8+
9+
@property
10+
def name(self):
11+
return self._name
12+
13+
@name.setter
14+
def name(self, value):
15+
self._name = value.upper()
16+
17+
@property
18+
def birth_date(self):
19+
return self._birth_date
20+
21+
@birth_date.setter
22+
def birth_date(self, value):
23+
self._birth_date = date.fromisoformat(value)

python-getter-setter/employee3.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from datetime import date
2+
3+
4+
class Employee:
5+
def __init__(self, name, birth_date, start_date):
6+
self.name = name
7+
self.birth_date = birth_date
8+
self.start_date = start_date
9+
10+
@property
11+
def name(self):
12+
return self._name
13+
14+
@name.setter
15+
def name(self, value):
16+
self._name = value.upper()
17+
18+
@property
19+
def birth_date(self):
20+
return self._birth_date
21+
22+
@birth_date.setter
23+
def birth_date(self, value):
24+
self._birth_date = date.fromisoformat(value)
25+
26+
@property
27+
def start_date(self):
28+
return self._start_date
29+
30+
@start_date.setter
31+
def start_date(self, value):
32+
self._start_date = date.fromisoformat(value)

python-getter-setter/employee4.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from datetime import date
2+
3+
4+
class Date:
5+
def __set_name__(self, owner, name):
6+
self._name = name
7+
8+
def __get__(self, instance, owner):
9+
return instance.__dict__[self._name]
10+
11+
def __set__(self, instance, value):
12+
instance.__dict__[self._name] = date.fromisoformat(value)
13+
14+
15+
class Employee:
16+
birth_date = Date()
17+
start_date = Date()
18+
19+
def __init__(self, name, birth_date, start_date):
20+
self.name = name
21+
self.birth_date = birth_date
22+
self.start_date = start_date
23+
24+
@property
25+
def name(self):
26+
return self._name
27+
28+
@name.setter
29+
def name(self, value):
30+
self._name = value.upper()

python-getter-setter/label.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Label:
2+
def __init__(self, text, font):
3+
self._text = text
4+
self._font = font
5+
6+
def get_text(self):
7+
return self._text
8+
9+
def set_text(self, value):
10+
self._text = value
11+
12+
def get_font(self):
13+
return self._font
14+
15+
def set_font(self, value):
16+
self._font = value

python-getter-setter/label2.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Label:
2+
def __init__(self, text, font):
3+
self.set_text(text)
4+
self.font = font
5+
6+
def get_text(self):
7+
return self._text
8+
9+
def set_text(self, value):
10+
self._text = value.upper() # Attached behavior

python-getter-setter/person.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Person:
2+
def __init__(self, name, birth_date):
3+
self.name = name
4+
self._birth_date = birth_date
5+
6+
def get_birth_date(self):
7+
return self._birth_date
8+
9+
def set_birth_date(self, value, force=False):
10+
if force:
11+
self._birth_date = value
12+
else:
13+
raise AttributeError("can't set birth_date")

python-getter-setter/person2.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Person:
2+
def __init__(self, name):
3+
self._name = name
4+
5+
@property
6+
def name(self):
7+
return self._name
8+
9+
@name.setter
10+
def name(self, value):
11+
self._name = value
12+
13+
14+
class Employee(Person):
15+
@property
16+
def name(self):
17+
return super().name.upper()

python-getter-setter/person3.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Person:
2+
def __init__(self, name):
3+
self._name = name
4+
5+
def get_name(self):
6+
return self._name
7+
8+
def set_name(self, value):
9+
self._name = value
10+
11+
12+
class Employee(Person):
13+
def get_name(self):
14+
return super().get_name().upper()

0 commit comments

Comments
 (0)