2017-07-28 1 views
0

J'ai une question à l'affectation de variable dans le constructeur: J'ai un constructeur qui prend l'argument 'contexte'. D'abord, j'affecte cette variable à une variable de classe. Deuxièmement, je crée une autre classe qui prend aussi 'context' comme argument.Affectation de variable dans le constructeur

À ma question: Vaut-il mieux assigner la variable de classe (self.context) ou l'argument du constructeur (context) à la nouvelle classe créée?

class State(): 
    def __init__(self, context): 
     self.context = context   
     self.diconnected = Disconnected(self.context) 

ou

class State(): 
     def __init__(self, context): 
      self.context = context   
      self.diconnected = Disconnected(context) 
+2

Ce sont des variables d'instance, pas des variables de classe. –

+0

Désolé pour la confussion. Je voulais dire des variables d'instance bien sûr – Caduceus

Répondre

2

Le résultat final est le même. Disconnected(context) est juste un peu plus court et plus rapide.

0

Cela ne va vraiment pas affecter le temps d'exécution de votre programme de manière significative en Python. La seule situation qui pourrait être importante est lorsque plusieurs threads utilisent ces données. J'utiliserais toujours l'argument juste au cas où.

+0

Pour clarifier: Un thread pourrait s'interrompre entre l'affectation (self.context = context) et l'utilisation du self.context comme argument et donc conduire à un état invalide? – Caduceus

+0

Il pourrait changer la valeur de self.context avant qu'il ne soit passé au constructeur de la seconde classe. – pointerless

0

Aucune n'est objectivement "meilleure"; vous passez le même objet à Disconnected dans tous les cas.

Lequel vous écrivez dépend de la dépendance dont vous voulez souligner: que Disconnected a le même contexte que self (ce qui implique également que self a toujours un), ou qu'il a passé le contexte comme paramètre.