Quel est le sens de « soi » et les expressions « __init__ » en Python? [fermé]

StackOverflow https://stackoverflow.com/questions/1769774

  •  21-09-2019
  •  | 
  •  

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

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top