Quel est le sens de « soi » et les expressions « __init__ » en Python? [fermé]
Question
Je ne comprends pas ce qu'ils sont utilisés pour, en particulier l'argument self
? Aurait-on s'il vous plaît me expliquer cela et pourquoi diable vous voulez passer cela dans?
De plus, je l'ai toujours pensé __init__
était pour « initialisation », mais il n'y a pas eu pour moi que je ne l'ai jamais dû mettre quoi que ce soit ici avant. Quelqu'un pourrait-il me donner un exemple facile?
modifier. Je reçois tellement confus chaque fois que je vois self
être passé dans une fonction, ou quelque chose comme ça
La solution
self
est l'objet que vous appelez la méthode sur. Il est un peu comme this
en Java.
__init__
est appelée sur chaque objet lorsqu'il est créé pour l'initialiser. Il est comme le constructeur en Java.
Vous utilisez __init__
chaque fois que vous vouliez établir des attributs - variables membres en Java - de l'objet lors de sa création. Si vous êtes satisfait avec un objet « vide » vous n'avez pas besoin d'une méthode __init__
mais si vous voulez créer un objet avec des arguments que vous aurez besoin.
Un exemple serait:
class StackOverflowUser:
def __init__(self, name, userid, rep):
self.name = name
self.userid = userid
self.rep = rep
dave = StackOverflowUser("Dave Webb",3171,500)
On peut alors regarder l'objet, nous avons créé:
>>> dave.rep
500
>>> dave.name
'Dave Webb'
On peut donc voir __init__
est passé les arguments que nous avons données au constructeur avec self
, qui est la référence à l'objet qui a été créé. Nous utilisons ensuite self
lorsque nous traitons les arguments et mettre à jour de façon appropriée l'objet.
Il y a la question de savoir pourquoi Python a self
quand d'autres langues ne ont pas besoin. Selon le Python FAQ :
Pourquoi faut-il 'soi' être utilisé explicitement dans la définition des méthodes et des appels?
D'abord, il est plus évident que vous utilisez une méthode ou attribut d'instance au lieu d'une variable locale ...
En second lieu, cela signifie qu'aucune syntaxe spéciale est nécessaire si vous souhaitez faire référence explicitement ou appeler la méthode d'une classe particulière ...
Enfin, pour les variables d'instance, il résout un problème syntaxique avec affectation: (! Par définition) puisque les variables locales en Python sont les variables auxquelles une valeur attribuée dans un corps de la fonction (et qui ne sont pas explicitement déclarée mondiale), il doit être un moyen de dire à l'interprète qu'une cession était destinée à assigner à une variable d'instance au lieu d'une variable locale, et il doit être de préférence syntaxique (pour des raisons d'efficacité) ...
Autres conseils
auto est par convention l'instance de l'objet que vous appelez une méthode.
Par exemple:
class MyClass:
"""A simple example class"""
def __init__(self):
print "MyClass class created"
i = 12345
def f(self):
return self.i
# Create an object called a of type MyClass. This will print "MyClass class created"
a = MyClass()
# Run the method - should return 12345
print a.f()
# Make another instance of the class to illustrate they are separate.
b = MyClass()
# Set a.i to another value.
a.i = 1
# Note the result
print a.f()
print b.f()
Par ailleurs, vous ne devez pas l'appeler soi-même, vous pouvez l'appeler ce que vous voulez. Il sera toujours le premier paramètre.
Pensez-y comme « ce » paramètre en C ++ / Java:. Il est utilisé pour faire référence à une instance d'une classe
Class Whatever:
def __init__(self, some_parameter):
self.instance_parameter = some_parameter
Pensez à __init__
comme une instance de classe constructeur .