Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
Questo repository è archiviato. Puoi vedere i file e clonarli, ma non puoi effettuare richieste di pushj o aprire problemi/richieste di pull.

python-07.md 5.4 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. % Programmation avec Python (chapitre 7)
  2. % Dimitri Merejkowsky
  3. #
  4. \center \huge Un nouveau mot-clé
  5. # Les mots-clés
  6. Des mots qui ne peut être utilisé pour des noms de variales.
  7. On a déjà vu: `def`, `class`, `import`, etc ...
  8. # Assertions
  9. * Arrêter immédiatement le programme avec un message
  10. * Ressemble à `sys.exit()`
  11. * Mais usage un peu différent
  12. # Les assertions sont là pour les dévelopeurs
  13. * Le message n'aura en général *aucun* sens si c'est un simple utilisateur
  14. qui le lit.
  15. * Il indique en général un problème *interne*, dans le code lui-même,
  16. par opposition aux erreurs *externes*
  17. Mais on en reparlera :)
  18. #
  19. \center \huge Rappels sur les classes
  20. # Définition d'une classe
  21. Construire la classe`Counter` avec un attribut `count`:
  22. ```python
  23. class Counter:
  24. def __init__(self):
  25. self.count = 0
  26. ```
  27. # Instantiation
  28. Construire une nouvelle *instance* de `Counter`
  29. ```python
  30. >>> counter = Counter()
  31. >>> counter.count
  32. 0
  33. ```
  34. # Méthode
  35. Ajouter une méthode pour incrémenter le compteur:
  36. ```python
  37. class Counter:
  38. def __init__(self):
  39. self.count = 0
  40. def increment(self):
  41. self.count += 1
  42. ```
  43. # Apeller une méthode
  44. ```python
  45. >>> counter = Counter()
  46. >>> counter.count
  47. 0
  48. >>> counter.increment()
  49. >>> counter.count
  50. 1
  51. ```
  52. #
  53. \center \huge Compléments sur les classes
  54. # Attributs d'instances
  55. En vrai les attributs qu'on a vu maintenant sont des
  56. attributs d'instance. Ils sont liés à l'instance courante.
  57. Mais on dit souvent "attribut" tout court.
  58. Il existe un autre type d'attribut.
  59. # Attributs de classe
  60. Dans le bloc de la classe, mais à l'extérieur des
  61. blocs de méthodes:
  62. ```python
  63. class Car:
  64. total_number_of_cars = 0
  65. def __init__(self, color="black"):
  66. # attribut d'instance: avec self
  67. self.color = color
  68. # attribut de classe: avec le nom de la classe
  69. Car.total_number_of_cars += 1
  70. ```
  71. # Attributs de classe - 2
  72. Les attributs de classe sont partagés entre toutes
  73. les instances:
  74. ```python
  75. >>> ford = Car()
  76. >>> ferrari = Car(color="red")
  77. >>> Car.total_number_of_cars
  78. 2
  79. ```
  80. # Méthodes de classes
  81. De même, techniquement les méthodes qu'on a vu sont des méthodes
  82. d'instance, et il existe des méthodes de classe
  83. # Méthodes de classes
  84. Avec un joli `@classmethod` au-dessus
  85. ```python
  86. class Car:
  87. total_number_of_cars = 0
  88. @classmethod
  89. def print_number_of_cars(cls):
  90. print(cls.total_number_of_cars, "have been made")
  91. def print_color(self):
  92. print("This car is", self.color)
  93. ```
  94. Notez le `cls`
  95. # Méthodes de classes
  96. Pour appeler:
  97. ```python
  98. >>> ferrari = Car(color="red")
  99. >>> ford = Car()
  100. >>> Car.print_number_of_cars()
  101. 2 cars have been made
  102. ```
  103. # On retrouve le même mécanisme
  104. * ce qu'on écrit
  105. ```
  106. car.print_color()
  107. ```
  108. \vfill
  109. * ce qui est appelé:
  110. ```
  111. # self = car
  112. def print_color(self):
  113. print(self.color)
  114. ```
  115. # On retrouve le même mécanisme
  116. * ce qu'on écrit
  117. ```
  118. Car.print_number_of_cars()
  119. ```
  120. \vfill
  121. * ce qui est appelé:
  122. ```
  123. # cls = Car
  124. @classmethod
  125. def print_number_of_cars(cls):
  126. print(cls.total_number_of_cars)
  127. ```
  128. #
  129. \center \huge Les API Web
  130. # Concepts
  131. # HTTP
  132. Une façon pour des machines différentes de parler entre elles.
  133. On fait toujours un aller-retour du *client* vers le *serveur*.
  134. ![](img/client-serveur.png)
  135. # Requêtes
  136. Une requête part du client vers le serveur et consite en:
  137. * Une URL
  138. * Un verbe (souvent GET)
  139. * Des paramètres
  140. * Et d'autres trucs
  141. # Réponses
  142. Une réponse revient du serveur vers le client et contient
  143. * Un code de retour
  144. * Du contenu (très souvent, du texte)
  145. * Et d'autres trucs
  146. # API Web et navigateurs
  147. Quand vous tapez une url dans votre navigateur ou que vous suivez
  148. un lien, c'est votre navigateur qui fait la requête.
  149. Le serveur lui renvoie un contenu particulier (du HTML)
  150. C'est ce que vous voyez quand vous faites "show source"
  151. Vous voyez parfois le code de retour (le plus connu étant 404)
  152. # API Web et navigateurs
  153. Grosso modo, quand vous visitez une page, vous faites un GET,
  154. et quand vous remplissez un formulaire, vous faites un POST
  155. *C'est très simplifié*
  156. # Utiliser une API Web
  157. Grosso modo:
  158. * Lire les conditions d'utilisation (important!)
  159. * Regarder les URLs possibles et les paramètres attendus
  160. * Faire quelque chose avec la réponse
  161. Notez qu'on a *absolument* aucune connaissance du code qui tourne sur le serveur!
  162. # JSON
  163. * Un format *texte*.
  164. * *Très* utilisé justement pour échanger des données entre des machines différentes.
  165. * Implémenté dans plein de langages.
  166. # JSON
  167. Examples:
  168. * Une liste:
  169. ```json
  170. ["one", "two"]
  171. ```
  172. * Un "objet":
  173. ```json
  174. {
  175. "color": "blue",
  176. "size": 3
  177. }
  178. ```
  179. # JSON
  180. On peut imbriquer les objets les uns dans les autres:
  181. ```json
  182. {
  183. "a": 42,
  184. "b": true,
  185. "c": ["one", "two"],
  186. }
  187. ```
  188. On dit que JSON est un format *texte* par ce qu'on peut le mettre dans une string.
  189. # JSON / Python
  190. Python | JSON
  191. -------|-----
  192. dictionnary | object
  193. True | true
  194. False | false
  195. None | null
  196. # Parser du JSON en Python
  197. ```python
  198. >>> import json
  199. >>> data = json.loads("...")
  200. >>> data["a"]
  201. 42
  202. ```
  203. # Émettre du JSON à partir d'un objet Python
  204. ```python
  205. >>> import json
  206. >>> my_object = { "key1" : ["one", "two"] }
  207. >>> json.dumps(my_object, indent=2)
  208. """
  209. {
  210. "key1": ["one", "two"]
  211. }
  212. """
  213. ```
  214. #
  215. \center \huge Atelier
  216. # Objectif
  217. * Partir d'un bout de code (moche) qui utilise l'API marvel
  218. * Le nettoyer en introduisant des classes
  219. * Le rendre plus flexible
  220. * Etc ...