% Programmation avec Python (chapitre 7) % Dimitri Merejkowsky
\center \huge Rappels sur les classes
Construire une classeCounter
vide:
class MyClass:
...
Construire une nouvelle instance de MyClass
>>> my_instance = MyClass()
Ajouter une méthode:
class MyClass:
def my_method(self):
...
self
représente l’objet courant.
Appeler une méthode:
>>> my_instance = MyClass()
>>> my_instance.my_method()
>>> my_instance = MyClass()
>>> my_instance.my_attribute = 0
class MyClass():
def my_method(self):
print(self.my_attribute)
Initialiser les attributs:
class MyClass:
def __init__(self):
self.my_attribute = 0
>>> my_instance = MyClass()
>>> my_instance.my_attribute
0
\center \huge Compléments sur les classes
En vrai les attributs qu’on a vu maintenant sont des attributs d’instance. Ils sont liés à l’instance courante.
Mais on dit souvent “attribut” tout court.
Il existe un autre type d’attribut.
Dans le bloc de la classe, mais à l’extérieur des blocs de méthodes:
class Car:
total_number_of_cars = 0
def __init__(self, color="black"):
# attribut d'instance: avec self
self.color = color
# attribut de classe: avec le nom de la classe
Car.total_number_of_cars += 1
Les attributs de classe sont partagés entre toutes les instances:
>>> ford = Car()
>>> ferrari = Car(color="red")
>>> Car.total_number_of_cars
2
De même, techniquement les méthodes qu’on a vu sont des méthodes d’instance, et il existe des méthodes de classe
Avec un joli @classmethod
au-dessus
class Car:
total_number_of_cars = 0
@classmethod
def print_number_of_cars(cls):
print(cls.total_number_of_cars, "have been made")
Notez le cls
.
Pour appeler:
>>> ferrari = Car(color="red")
>>> ford = Car()
>>> Car.print_number_of_cars()
2 cars have been made
Au lieu de dire “de classe” on utilise parfois “statique”.
Mais “statique” veut dire plein d’autres chose...
car.print_color()
\vfill
# self = car
def print_color(self):
print(self.color)
Car.print_number_of_cars()
\vfill
# cls = Car
@classmethod
def print_number_of_cars(cls):
print(cls.total_number_of_cars)
\center \huge Les API Web
Un protocole: une façon pour des machines différentes d'échanger des informations.
On fait souvent un aller-retour du client vers le serveur.
Une requête part du client vers le serveur et consite en:
?a=42&b=true
)Une réponse revient du serveur vers le client et contient
Quand vous tapez une url dans votre navigateur ou que vous suivez un lien, c’est votre navigateur qui fait la requête.
Le serveur lui renvoie un contenu particulier (du HTML) C’est ce que vous voyez quand vous faites “show source”
Vous voyez parfois le code de retour (le plus connu étant 404)
C’est très simplifié
Des règles pour interpréter du texte:
<body>
<h1>Ceci est un titre</h1>
<p>
Ceci est un paragraphe
</p>
</body>
Avec requests
, la librarie pour faire des requêtes HTTP en Python.
Malheureusement pas dans la librarie standard.
import requests
>>> response = request.get(url)
>>> response.status_code
200 # si tout va bien
>>> response.text
"<!DOCTYPE html ..."> # le texte de la réponse
Faire tourner de code sur le client, en utilisant du code sur un serveur via le protocole HTTP.
Notez qu’on a absolument aucune connaissance du code qui tourne sur le serveur!
Examples:
["one", "two"]
{
"color": "blue",
"size": 3
"pretty": true,
}
Attention: les clés json sont toujours des strings.
On peut imbriquer les objets les uns dans les autres:
{
"a": 42,
"b": true,
"c": ["one", "two"],
}
Python | JSON |
---|---|
dictionnary | object |
True | true |
False | false |
None | null |
>>> import json
>>> data = json.loads("...")
>>> data["a"]
42
>>> import json
>>> my_object = { "key1" : ["one", "two"] }
>>> json.dumps(my_object, indent=2)
"""
{
"key1": ["one", "two"]
}
"""
\center \huge Atelier
>>> response = requests.get(url)
>>> text = response.text
>>> data = json.loads(text)
Ou directement
>>> response = requests.get(url)
>>> data = response.json()
Les sources de départ et d’arrivée sont sur GitHub:
https://github.com/E2L/cours-python/tree/master/sources/marvel
On repartira du code d’arrivée la prochaine fois