Résolue

Différence entre méthode liée et fonction

# Méthodes # Orienté objet # Python
class TableauNoir:

    def __init__(self, surface):
        self.surface = surface

    def ecrire(self, message):
        """ Méthode permettant d'écrire sur la surface du tableau.
        """
        self.surface = message

tab = TableauNoir("bonjour")


# bound method TableauNoir.ecrire of '__main__.TableauNoir object at 0x000001B5F7A4BE80'

print(TableauNoir.ecrire)
# function TableauNoir.ecrire at 0x000001B5F5E855A0

Je vois qu'il y a une différence entre tab.ecrire et TableauNoir.ecrire.

1) C'est quoi la diff entre une bound method TableauNoir.ecrire et une function TableauNoir.ecrire
2) Pourquoi est ce qu'elles n'ont pas la même adresse non plus ?

Gabriel Trouvé

Mentor

Salut,

Quand tu fais ça :
TableauNoir.ecrire(tab, "test")
Il faut passer explicitement une instance. C'est la fonction brute en fait.

Ici : tab.ecrire("test") La méthode est déjà "connectée" à une instance.

Et effectivement, les adresses sont différentes :

  • TableauNoir.ecrire est l'adresse de ta méthode créé lorsque tu as défini la classe

  • tab.ecrire a sa propre adresse car tu es sur un nouvel objet bound method séparé

En fait, à chaque fois que je fais un tab.ecrire, Python va en coulisse me retourner un nouvel objet "bound method", c'est ça ?

Gabriel Trouvé

Mentor

Salut !

Oui tu as un nouvel objet.

Tu peux tester, tu vas voir ça te retourne False :

a = tab.ecrire
b = tab.ecrire
print(a is b)

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.