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 la méthode getone()
:
print myObj.getone()
RÉSULTAT: l'erreur "getone ()" ne prend aucun argument (1given).
Je remplace donc:
def getone():
return 1
avec
def getone(self):
return 1
RÉSULTAT: 1 C'est OK.
Mais la méthode getone()
n'a pas besoin d'arguments.
Dois-je utiliser un argument dénué de sens?
En Python:
self
.self
) ni la classe (cls
).__init__
est une fonction spéciale et sans surcharger __new__
on lui donnera toujours l'instance de la classe comme premier argument.
Un exemple utilisant les décorateurs de méthode de classe et de méthode statique intégrés:
import sys
class Num:
max = sys.maxint
def __init__(self,num):
self.n = num
def getn(self):
return self.n
@staticmethod
def getone():
return 1
@classmethod
def getmax(cls):
return cls.max
myObj = Num(3)
# with the appropriate decorator these should work fine
myObj.getone()
myObj.getmax()
myObj.getn()
Cela dit, j'essaierais d'utiliser @classmethod
/@staticmethod
avec parcimonie. Si vous vous trouvez à créer des objets qui ne sont rien d'autre que staticmethod
s, la chose la plus à faire en Pythonic serait de créer un nouveau module de fonctions connexes.
Chaque méthode doit accepter un argument: l'instance elle-même (ou la classe s'il s'agit d'une méthode statique).
Le fait que votre méthode ne tilise l'argument self
(qui est une référence à l'instance à laquelle la méthode est attachée) ne signifie pas que vous pouvez la laisser de côté. Il doit toujours être là, car Python va toujours essayer de le transmettre.
Dans python vous devez toujours passer au moins un argument aux méthodes de classe, l'argument est self
et ce n'est pas dénué de sens c'est une référence à l'instance elle-même
L'objet actuel est explicitement transmis à la méthode comme premier paramètre. self
est le nom conventionnel. Vous pouvez l'appeler comme vous voulez, mais il est fortement conseillé de respecter cette convention pour éviter toute confusion.