__init__ et les arguments en Python
Je veux comprendre les arguments du constructeur __init__
en Python.
class Num:
def __init__(self,num):
self.n = num
def getn(self):
return self.n
def getone():
return 1
myObj = Num(3)
print myObj.getn()
RÉSULTAT: 3
J'appelle le getone()
méthode:
print myObj.getone()
RÉSULTAT: Erreur 'getone()' ne prend pas d'arguments (1given).
J'ai donc remplacer:
def getone():
return 1
avec
def getone(self):
return 1
RÉSULTAT:1 C'est OK.
Mais getone()
méthode n'a pas besoin d'arguments.
Dois-je utiliser argument sans fondement?
- ils ne sont pas dénués de sens. chaque méthode d'une classe ont toujours un argument implicite, de l'instance. En C++ c'est la même chose, mais vous ne verrez jamais dans la liste d'arguments, car il apparaît comme par magie des buissons de la fée de la forêt. Python est
Explicit is better than implicit
. - Vous pouvez utiliser @staticmethod et @classmethod décorateurs à faire ce que vous voulez. Voir l'exemple dans ma réponse.
- même si vous le nom de la méthode init(self,param) vous pouvez obtenir l'erreur si vous n'avez pas de retrait de la def et donc la portée de la init méthode n'est pas dans la classe ...
Vous devez vous connecter pour publier un commentaire.
En Python:
self
argument.self
) ou de la classe (cls
argument).__init__
est une fonction particulière et sans écraser__new__
il sera toujours donné l'exemple de la classe en tant que premier argument.Un exemple d'utilisation de la builtin classmethod et staticmethod décorateurs:
Cela dit, je voudrais essayer d'utiliser
@classmethod
/@staticmethod
avec parcimonie. Si vous trouvez vous-même créer des objets constitués de rien, maisstaticmethod
s le plus pythonic chose à faire serait de créer un nouveau module de fonctions associées.Chaque méthode doit accepter un argument: L'instance elle-même (ou la classe si c'est une méthode statique).
Lire plus sur les classes en Python.
Le fait que votre méthode n'est pas utilisation la
self
argument (qui est une référence à l'instance que la méthode est attaché) ne signifie pas que vous pouvez le laisser sortir. Il doit toujours être là, parce que Python va toujours essayer de la passer en.En python, vous devez toujours passer dans au moins un argument pour les méthodes de classe, l'argument est
self
et il n'est pas dénué de sens, de son une référence à l'instance elle-mêmeL'objet est explicitement transmis à la méthode en tant que premier paramètre.
self
est le nom conventionnel. Vous pouvez l'appeler ce que vous voulez, mais il est fortement conseillé que vous vous en tenez à la présente convention pour éviter la confusion.