From 934d0798dc3a8dd46e3ac441361d86e1352a7ef9 Mon Sep 17 00:00:00 2001 From: Dimitri Merejkowsky Date: Fri, 5 Apr 2019 15:19:53 +0200 Subject: [PATCH] Update python-09.md --- sessions/Makefile | 2 +- sessions/python-09.md | 158 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 sessions/python-09.md diff --git a/sessions/Makefile b/sessions/Makefile index 11a0057..2a3cdb2 100644 --- a/sessions/Makefile +++ b/sessions/Makefile @@ -1,4 +1,4 @@ -all: python-08.pdf +all: python-09.pdf %.pdf: %.md pandoc -t beamer $< -o $@ diff --git a/sessions/python-09.md b/sessions/python-09.md new file mode 100644 index 0000000..716cd0b --- /dev/null +++ b/sessions/python-09.md @@ -0,0 +1,158 @@ +% Programmation avec Python (chapitre 9) +% Dimitri Merejkowsky + +\center \huge Rappels + +# Classes + +```python +class Car: + total_number_of_cars = 0 + + def __init__(self, color="black"): + self.color = color + Car.total_number_of_cars += 1 + + def drive(self): + print("vroom") + + @classmethod + def print_number_of_cars(cls): + print(cls.total_number_of_cars, + "cars have been made") +``` + +# Composition + + +```python +class Authorization: + def __init__(self, credentials_file): + ... + self.password = ... + +class Client: + url = "https://exmple.com" + def __init__(self, auth) + self.auth = auth + + def make_request(self): + password = self.auth.password + requests.get(url, password=password) +``` + +# Héritage - partage des attributs et méthodes + +```python +class A: + def method_in_a(self): + self.attribute_in_a = 42 + +class B(A): + def method_in_b(self): + self.method_in_a() # ok + self.attribute_in_a # ok +``` + +# Héritage - ordre de résolution des méthodes + +```python +class A: + def method_in_a(self): + pass + +class B(A): + def method_in_b(self): + pass + +>>> a = A() +>>> a.method_in_a() # ok +>>> a.method_in_b() # error + +>>> b = B() +>>> b.method_in_b() # ok +>>> b.method_in_a() # ok +``` + +# Héritage - ordre de résolution des méthodes + +```python +class A: + def method_in_a(self): + pass + +class B(A): + def method_in_b(self): + pass + +>>> a = A() +>>> a.method_in_a() # ok +>>> a.method_in_b() # error + +>>> b = B() +>>> b.method_in_b() # ok +>>> b.method_in_a() # ok +``` + +# Héritage: surcharge + +```python +class A: + def method(self): + print("A!") + +class B(A): + def method(self): + print("B!") + +>>> a = A() +>>> a.method() # ok +'A!' + +>>> b = B() +>>> b.method() +'B!' +``` + +# Héritage - super() + + +```python +class A: + def method(self): + print("A!") + +class B(A): + def method(self): + super().method() + print("B!") + +>>> a = A() +>>> a.method() # ok +'A!' +>>> b = B() +>>> b.method() +'A!' +'B!' +``` + +# Héritage - super() et \_\_init\_\_ + + +```python +# All animals have a species +class Animal: + def __init__(self, species): + self.species = species + +# Pets are animals with a name +class Pet(Animal): + def __init__(self, species, name): + super().__init__(species) # <- à ne pas oublier + self.name = name + +# All dogs are pets +class Dog(Pet): + def __init__(self, name): + super().init("dog", name) +```