Online Absolute Beginner Python Tutorials
Every Sunday 2pm (UK time/ BST)
by Cheuk Ting Ho
Get this slide deck: https://slides.com/cheukting_ho/python-decorators
Python objects - int, float, str, list, dict, bool
Control flows - if-else, for loop, while loop
Functions, modeuls and classes
pytest
One way to think of decorators, it's like a function factory
functions are objects in Python
def greeting_factory():
def greeting(name):
print(f"Hello, {name}")
return greeting
my_greeting = greeting_factory()
print(my_greeting)
my_greeting("Cheuk")
What is my_greeting?
What's inside my_greeting? (use dir)
What if I have a greeting but I want to spice it up with some tractor jokes
def greeting(name):
print(f"Hello, {name}")
def adding_jokes(greeting):
def better_greeting(name):
greeting(name)
print("How did the farmer find his missing cow? He tractor down")
return better_greeting
greeting("Cheuk")
print("Now make it better")
greeting = adding_jokes(greeting)
greeting("Cheuk")
What's going on here?
To use a decorator, adding it with `@` before the function
def adding_jokes(greeting):
def better_greeting(name):
greeting(name)
print("How did the farmer find his missing cow? He tractor down")
return better_greeting
@adding_jokes
def greeting(name):
print(f"Hello, {name}")
greeting("Cheuk")
What are we missing?
decorator to help writing decorators
from functools import wraps
def adding_jokes(greeting):
@wraps(greeting)
def better_greeting(*args, **kwargs):
greeting(*args, **kwargs)
print("How did the farmer find his missing cow? He tractor down")
return better_greeting
@adding_jokes
def greeting(name):
print(f"Hello, {name}")
greeting("Cheuk")
When to use decorators?
decorators can be useful for:
Authorization - if the function can be run
Testing - e.g. modify the function with parameters
OOP - property decorators - getters and setters
class person:
def __init__(self):
self.__name=''
@property
def name(self):
return self.__name
@name.setter
def name(self, value):
self.__name=value
@name.deleter
def name(self, value):
print('Deleting..')
del self.__name
Simple E-comerce similator ( e-shop.py)
https://github.com/Cheukting/python02hero/tree/master/2020-05-24-python-decorators
There is no homework :-)
Sunday 2pm (UK time/ BST)
There are also Mid Meet Py every Wednesday 1pm
Testing month in June