== Attributs et méthodes == Cette section traite d’un sujet qu’on peut considérer comme avancé, surtout pour un TP d’initiation : les ''méthodes''. C’est tout-à-fait dispensable en théorie : les éléments traités dans l’[[Initiation à Python 3|introduction]] suffisent pour répondre à tous les problèmes d’algorithmique. Mais on peut difficilement s’intéresser à Python sans aborder le sujet : la plupart des petites choses qui rendent la programmation Python agréable (Python est réputé « piles incluses ») sont accessibles via les méthodes des types de base. == Attributs == Un attribut n’est rien d’autre qu’une valeur « portée » par un objet, à laquelle on accède par son nom (qui respecte les mêmes conventions que les noms de variables): si l’objet `x` a un attribut `toto`, on obtient la valeur de cet attribut en écrivant `x.toto`. Par exemple, Python admet une représentation des nombres complexes sous la forme `a+bj` où `a` et `b` sont des nombres flottants: `a` est la partie réelle et `b` est la partie imaginaire. Si `a` est nul, on peut aussi écrire `bj`, par exemple `1j` est ce qu’on noterait `i` en maths (attention: `j` tout seul, c’est un nom de variable). Essayez: {{{#!highlight python from math import e,pi x=pi/4*1j print("exp(iπ/4) = ",e**x) }}} Les parties réelles et imaginaires d’un complexe sont disponibles comme des attributs `real` et `imag`: {{{#!highlight python z=e**x print("Partie réelle de exp(iπ/4) = ",z.real) }}} On aurait aussi bien pu faire: {{{#!highlight python print("Partie réelle de exp(iπ/4) = ",(e**x).real) }}} == Méthodes == Une méthode est une fonction qui est « portée » par un objet, c’est-à-dire a priori par n’importe quelle valeur. Ce n’est en fait rien d’autre qu’un attribut, dont la valeur est une fonction. On y accède donc par la syntaxe `valeur.methode(arguments)` : c’est presque comme un appel de fonction, sauf que c’est préfixé par une expression suivie d’un point. Un exemple: toutes les chaînes de caractères ont des méthodes `lower` et `upper`, qui retournent une version respectivement minuscule et majuscule de la même chaîne. {{{#!highlight python print('Bonjour'.upper(),'Bonjour'.lower()) }}} Ou encore, toutes les chaînes ont une méthode `split` qui prend un argument `séparateur`, et qui permet de découper la chaîne à chaque occurrence de `séparateur`, pour obtenir une liste de sous-chaînes. {{{#!highlight python tableau='nom\tprénom\tnote\nDuchamp\tMarcel\t12\nv. Gogh\tVincent\t16\nKoons\tJeff\t2' print('Voilà le tableau') print(tableau) lignes=tableau.split('\n') for i in range(1,len(lignes)): ligne = lignes[i] colonnes = ligne.split('\t') print(colonnes[1],colonnes[0],'a eu la note',colonnes[2] }}} == Aller plus loin == On peut trouver la liste des attributs et méthodes d’un objet avec la fonction `dir`. Mais il est certainement plus utile de consulter l’aide, lorsqu’elle est disponible… Définir des objets avec attributs et méthodes demande d’aborder la programmation objet, ce dont on peut se dispenser dans un premier temps. Il peut par contre être utile de voir un cas particulier: [[Les modules|les modules]].