Possible de changer le nom de la fonction de définition?
J'ai essayé plusieurs façons de changer le nom de la fonction dans la définition, mais ils ont échoué.
>>> def f():
pass
>>> f.__name__
'f'
>>> def f():
f.__name__ = 'new name'
>>> f.__name__
'f'
>>> def f():
self.__name__ = 'new name'
>>> f.__name__
'f'
Mais je peux changer le nom de l'attribut après le définir.
>>> def f():
pass
>>> f.__name__ = 'new name'
>>> f.__name__
'new name'
Une manière de changer/mettre dans la définition (autres qu'à l'aide d'un décorateur)?
La raison
Êtes-vous l'écriture de ce code pour la sécurité de l'emploi? 🙂
self.__method__()
de ne pas travailler est parce que self
est un argument transmis à l'argument de l'interprète. Il n'existe pas de mécanisme de passage d'une instance à votre fonction. (Soit dit en passant, le nom de la variable ne doit pas être self
, il peut être foo
, ou bar
ou quoi que ce soit)Êtes-vous l'écriture de ce code pour la sécurité de l'emploi? 🙂
OriginalL'auteur beardc | 2012-06-03
Vous devez vous connecter pour publier un commentaire.
Le corps de la fonction n'est pas exécutée jusqu'à ce que vous exécuter la fonction. Vous pouvez utiliser un décorateur:
Et ensuite l'utiliser comme ceci:
Toutefois, la fonction est toujours joignable uniquement comme
f
.OriginalL'auteur ThiefMaster
Pas. Le plus proche que vous pouvez venir à ce qui est la définition d'un rachetables de classe avec chaque instance ayant son
__name__
ensemble dans l'initialiseur.OriginalL'auteur Ignacio Vazquez-Abrams
Le corps de la fonction n'est pas exécuté jusqu'à l'appel de la fonction, donc il n'y a aucun moyen que vous pouvez utiliser le corps de la fonction à modifier ce qui se passe lors de la définition du temps. Pourquoi voulez-vous faire cela de toute façon? Si vous écrivez la fonction et veux qu'il ait un nom différent, il suffit de définir avec un nom différent.
OriginalL'auteur BrenBarn
Si vous le mettez dans le corps de la fonction, vous êtes en train de dire qu'une partie de la exécution de
f
est le réglage de son nom à'new name'
. Évidemment, cela ne va pas faire quoi que ce soit avant que la fonction a été appelée.À l'aide d'un décorateur est la manière canonique de déclarer qu'une fonction est un peu différent de celui de son
def
bloc seul indiquerait, et vous n'allez pas trouver quelque chose de mieux.OriginalL'auteur Ben
C'est sans doute stupide, mais plutôt des travaux?
f
peut être supprimée ou réutilisées pour autre chose.OriginalL'auteur robert king