Si on change un attribut d'objet qui fait référence à une méthode interne à une fonction externe après la création de l'objet, self n'est pas passé à la nouvelle fonction, même si l'attribut (qui contient une fonction) est appelé comme avant.Pourquoi ne passe-t-on pas automatiquement une fois qu'un attribut est modifié pour faire référence à une fonction externe?
class Person:
def greet(self):
print("hello")
do = greet
def wave(person):
print("bye")
alice = Person()
alice.do() #prints 'hello'
#change do to point an external function
alice.do = wave
alice.do() #Error: Missing argument
L'erreur exacte que je reçois est:
hello
Traceback (most recent call last):
File "C:\Users\Owner\Desktop\miniLiveMethodSwitch.py", line 15, in <module>
alice.do() #Error: Missing argument
TypeError: wave() missing 1 required positional argument: 'person'
Si un mouvement de la fonction externe dans la classe comme méthode interne,
class Person:
def greet(self):
print("hello")
def wave(person):
print("bye")
do = greet
Ensuite, le code fonctionne comme prévu. Pourquoi n'est-il pas passé automatiquement une fois que l'attribut est modifié pour faire référence à une fonction externe? Quelle est la bonne façon d'appeler la fonction afin que le soi soit passé?