Licence CC BY-NC-ND Thierry Parmentelat
_images/inria-25-alpha.png

objets, types et méthodes

Python est un paradigme orienté objet

cela signifie que toutes vos données sont des objets
entre autres choses chaque objet a un type

# en Python absolument toutes les données
# en mémoire sont des objets
# chaque objet possède (entre autres)
# un type

# un module
import math

# un nombre
x = 4 * math.pi

# une chaine
texte = "une chaine"

# une fonction
def fact(n):
    return 1 if n <= 1 else n * fact(n-1)
type(x)
float
type(texte)
str
type(fact)
function
type(math)
module

méthode = fonction attachée à un type

lorsqu’on appelle un méthode sur un objet,
la syntaxe est donc

objet.methode(parametre)

ce qui se passe c’est que

  • on cherche la méthode à partir du type de objet

  • on trouve une fonction, et on l’appelle

  • avec en premier argument l’objet

appel de méthode illustré

chaine = "bonjour"
chaine
'bonjour'
# la recherche de 'capitalize'
# à partir de `chaine`
# trouve une fonction rangée
# dans le type `str`

la_methode = str.capitalize
la_methode
<method 'capitalize' of 'str' objects>
# lorsqu'on écrit ceci
chaine.capitalize()
'Bonjour'
# c'est comme si on avait
# écrit
la_methode(chaine)
'Bonjour'
# si on passe des arguments
chaine.center(13, '-')
'---bonjour---'
# ils sont ajoutés après l'objet
str.center(chaine, 13, '-')
'---bonjour---'

à quoi ça sert ?

par rapport à un appel de fonction, 2 avantages

  • la résolution du nom de la méthode se fait à l’exécution

    • le même code se comporte différemment

    • sur des entrées de type différents

    • permet d’écrire du code plus générique

  • espaces de nom plus propres
    pas besoin d’inventer des noms comme str_capitalize