from datetime import datetime
class Person():
def __init__(self, years):
self.age = years
@property
def age(self):
return datetime.now().year - self.birthyear
@age.setter
def age(self, years):
if years < 0:
raise ValueError("Age cannot be negative")
self.birthyear = datetime.now().year - years
from person5 import Person
p = Person(19)
print(p.age) # 19
p.age = p.age + 1
print(p.age) # 20
p.birthyear = 1992
print(p.age) # 28
# warning: this will be different if you run the example in a year different from 2020 :)
from person5 import Person
print("Hello")
p = Person(-1)
Hello
Traceback (most recent call last):
File "person5_bad_init.py", line 5, in <module>
p = Person(-1)
File "/home/gabor/work/slides/python-programming/examples/classes/person/person5.py", line 4, in __init__
self.age = years
File "/home/gabor/work/slides/python-programming/examples/classes/person/person5.py", line 13, in age
raise ValueError("Age cannot be negative")
ValueError: Age cannot be negative
Hello
10
Traceback (most recent call last):
File "person5_bad_setter.py", line 7, in <module>
p.age = -1
File "/home/gabor/work/slides/python-programming/examples/classes/person/person5.py", line 13, in age
raise ValueError("Age cannot be negative")
ValueError: Age cannot be negative