Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

types prédéfinis et monde réel

les types prédéfinis que l’on a vus jusqu’ici
i.e. nombres, chaines, containers
(pour rappel: bool, int, float, str, list, set, dict)
sont pratiques et puissants

MAIS souvent cela n’est pas suffisant pour traiter des problèmes réels

typiquement

on a très souvent besoin de manipuler des données ‘composites’
e.g. un ensemble de personnes, de villes, de compagnies aériennes
en termes de modèle de données, ce sont des ‘enregistrements’
c’est-à-dire en fait des données composites

utiliser un dictionnaire - ou un tuple - peut faire l’affaire
pour des applications simples
(c’est par exemple ce qu’on récupère d’un fichier JSON)
mais c’est vite un peu lourd et très limité

class

dans ces cas-là (et dans bien d’autres)
il est plus flexible de se définir un nouveau type
qui permette de créer des objets qui ont les propriétés en question
que dans ce contexte on appelle des attributs

instances

remarquez qu’ici

def __init__(self, name, age)
User("Lambert", 25)`

affichage

<__main__.User at 0x7fb360663380>
Martin, 22 ans

méthodes

comme on l’a évoqué dans la section “objets, types et méthodes”
dans une classe on peut définir des méthodes
qui sont des fonctions qui s’appliquent sur un objet (de cette classe)

fact(3) > fact(2) > fact(1)
'fact(1)'
fact(3) > fact(2)

méthodes - suite

à nouveau, remarquez que la définition d’une méthode
prévoit un paramètre de plus que l’appel de la méthode
car obj.methode(...)
est équivalent à methode(obj, ...)

intérêts de cette approche

objets et langage

le langage “connaît” bien sûr les types prédéfinis
c’-à-d qu’il sait “faire la bonne chose”
selon le type des objets qu’il manipule

exemples, selon le type de obj :

exemple - if obj:

remarquez qu’on peut toujours écrire un test if (ou while) même si le sujet du test n’est pas un booléen

bingo
bingo

la règle pour les types prédéfinis est que dans un test
0, 0.0, "", [], set(), {} sont considérés comme False
les autres valeurs sont considérées comme True

méthodes spéciales

les méthodes spéciales sont toutes de la forme __bidule__
on en a déjà vu 2 : __init__ et __repr__
le langage en prévoit plusieurs dizaines (optionnelles)

exemple de méthode spéciale

exemple
lorsqu’un objet est utilisé dans un if obj:
il est d’abord converti en booléen par bool(obj)

pour redéfinir ce que cela veut dire sur une classe
on peut définir la méthode spéciale __bool__

dans l’exemple qui suit, je définis une classe Person
et je décide (uniquement à but pédagogique)
que l’instruction if person:
va s’exécuter avec les gens dont le nom n’est pas nobody

YES !
True
False

résumé

la classe Quaternion - avancés

En option

on peut aussi redéfinir les opérateurs arithmétiques
comme + et * avec les
méthodes spéciales __add__ et __mul__

Application: une micro-classe qui implémente les quaternions

(-1, 0, 0, 0)
(0, 0, 0, 1)
(-1, 0, 0, 0)
True
(-28, 4, 6, 8)
(-2, 1, 4, -3)
(-2, 1, -4, 3)

limitations pour cette version rustique :