Python >> Tutoriel Python >  >> Python

Quelle est la manière la plus pythonique d'aliaser les noms de méthode ?

Contrairement à une méthode Python normale, une méthode d'alias accède à une méthode originale via un nom différent, principalement pour faciliter la programmation. Un exemple est la méthode itérable __next__() accessible aussi avec next() . Vous pouvez définir votre propre méthode d'alias en ajoutant la déclaration a = b à votre définition de classe. Cela crée une méthode d'alias a() pour la méthode originale b() .

Exemple d'alias

Voici un exemple minimal :

class Car:
  

  def change_oil(self):
    print('oil changed')
  
  
  def drive_to_cinema(self):
    print('movie watched')


  # Alias Method Names
  oil = change_oil
  cinema = drive_to_cinema


# Create new car object
porsche = Car()

# Test original and alias method calls
porsche.change_oil()
# oil changed

porsche.oil()
# oil changed

porsche.cinema()
# movie watched

porsche.drive_to_cinema()
# movie watched

Vous créez un Car objet porsche . La méthode originale change_oil() peut être trop long, vous décidez donc d'ajouter une méthode d'alias à la définition de classe oil = change_oil . Désormais, vous pouvez accéder à la même méthode de deux manières différentes :porsche.change_oil() ou simplement porsche.oil() .

Cahier interactif

Vous pouvez exécuter ce code de manière interactive dans notre Jupyter Notebook :

Cliquez simplement sur le code et exécutez-le dans un nouvel onglet !

Les méthodes d'alias sont-elles vraiment python ?

Vous devez cependant noter que l'utilisation d'un alias n'est pas du tout très pythonique ! Le Zen de Python stipule clairement qu'il devrait y avoir une, et une seule, façon d'accomplir une chose.

>>> import this
The Zen of Python, by Tim Peters         
 Beautiful is better than ugly.
 Explicit is better than implicit.
 Simple is better than complex.
 Complex is better than complicated.
 Flat is better than nested.
 Sparse is better than dense.
 Readability counts.
 Special cases aren't special enough to break the rules.
 Although practicality beats purity.
 Errors should never pass silently.
 Unless explicitly silenced.
 In the face of ambiguity, refuse the temptation to guess.
 There should be one – and preferably only one – obvious way to do it.
 Although that way may not be obvious at first unless you're Dutch.
 Now is better than never.
 Although never is often better than right now.
 If the implementation is hard to explain, it's a bad idea.
 If the implementation is easy to explain, it may be a good idea.
 Namespaces are one honking great idea – let's do more of those!

Qu'est-ce que l'aliasing ?

L'aliasing se produit si vous accédez au même emplacement mémoire via différents noms symboliques. Si vous modifiez les données via un nom, l'autre nom pointant vers les mêmes données verra également le changement !

Dans le graphique, les deux variables a et b pointe vers le même objet imaginaire avec la valeur 42 . Vous supprimez l'objet avec a.delete() . Maintenant, les deux variables a et b pointez sur l'objet vide. Variable b voit un changement, même si cela n'a rien changé !

"En informatique, l'aliasing décrit une situation dans laquelle un emplacement de données en mémoire est accessible via différents noms symboliques dans le programme. Ainsi, la modification des données par un nom modifie implicitement les valeurs associées à tous les noms alias, ce qui peut ne pas être attendu par le programmeur. Par conséquent, l'aliasing rend particulièrement difficile la compréhension, l'analyse et l'optimisation des programmes. Les analyseurs d'aliasing ont pour but de créer et de calculer des informations utiles pour comprendre l'aliasing dans les programmes. ” — Wikipédia