- @property
Use Python @propery for value validation
examples/classes/person/person5.py
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
examples/classes/person/person5_good.py
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 :)
examples/classes/person/person5_bad_init.py
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