2010-10-26 3 views
1

J'ai souvent des fonctions qui prennent un paramètre, définissez une variable d'instance à ce paramètre, puis faire d'autres choses, par exemple:style de codage: utiliser un paramètre ou une variable d'instance?

def updateFoo(self, foo): 
    self.foo = foo 
    fooProcessor1(foo) 
    fooProcessor2(self.foo) 

Préférez-vous passer le paramètre lui-même, comme dans fooProcessor1, ou le nouveau -set variable d'instance, comme dans fooProcessor2? Pourquoi ou pourquoi pas?

Répondre

2

Une fonction nommée setFoo() vraiment ne devrait pas faire autre chose que la mise en foo moins qu'il ne soit le calcul et la mise en cache une valeur dérivée de foo, dans ce cas, je vous conseille quelque chose le long des lignes de:

def setFoo(self, foo): 
     self.foo = foo 
     self.__fooUpdated() 

    def __fooUpdated(self): 
     # Recompute values derived from foo, dispatch signal to listeners, etc. 

de les options que vous avez suggérées, je préfère fooProcessor1(foo). Cela dit, c'est surtout une question de préférence personnelle. Tant que vous êtes cohérent, je ne pense pas que cela ait autant d'importance.

+0

Je ne voulais pas dire que ce soit juste une fonction de setter, ces fonctions font d'autres choses aussi. a changé le nom de fonction – Claudiu

+0

@Claudiu - pour des raisons de style, vous définissez 'self.foo', puis vous recalculez les choses en fonction de la nouvelle valeur de' self.foo'. Il peut s'agir de cheveux fractionnés, mais ce n'est pas tout à fait la même chose que de recalculer les valeurs basées sur le * paramètre * 'foo'. Pour cette raison, j'aime la solution de Michael ici, qui sépare les préoccupations. –

+0

hmm ouais je vois ton point .. j'aime ça – Claudiu

2

Les codeurs doivent être paresseux. soi. est beaucoup trop à taper à 1 heure du matin.

+0

qui m'a fait rire – user1288851

Questions connexes