13 votes

Appel de méthodes de chaînes avec des résultats intermédiaires

J'ai une classe et quelques méthodes de celle-ci. Pourrais-je garder un résultat des méthodes entre les appels.

Exemple d'appel :

résultat = mon_obj.méthode_1(...).méthode_2(...).méthode_3(...)

quand method_v3(...) a reçu un résultat de la part de la method_2(..) qui ont reçu un résultat de l'enquête method 1(..)

Dites-moi s'il vous plaît, y a-t-il des modèles ou quelque chose pour décider l'exemple ci-dessus ?

16voto

Hunter McMillen Points 17717

Il existe un modèle assez simple appelé le Builder Pattern où les méthodes renvoient essentiellement une référence à l'objet courant, de sorte qu'au lieu d'enchaîner les appels de méthodes les uns sur les autres, ils sont enchaînés sur la référence de l'objet.

Le modèle Builder actuel décrit dans le livre Gang of Four est un peu verbeux (pourquoi créer un objet Builder) et renvoie plutôt une référence à self de chaque setXXX() pour un enchaînement propre des méthodes.

Cela pourrait ressembler à quelque chose comme ceci en Python :

class Person: 
   def setName(self, name):
      self.name = name
      return self   ## this is what makes this work

   def setAge(self, age):
      self.age = age;
      return self;

   def setSSN(self, ssn):
      self.ssn = ssn
      return self

Et vous pourriez créer une personne comme ça :

p = Person()
p.setName("Hunter")
 .setAge(24)
 .setSSN("111-22-3333")

Gardez à l'esprit que vous devrez effectivement enchaîner les méthodes avec eux en les touchant. p.a().b().c() car Python n'ignore pas les espaces blancs.

Comme le note @MaciejGol dans les commentaires, vous pouvez assigner à p comme ça pour enchaîner avec les espaces blancs :

p = (
   Person().setName('Hunter')
           .setAge(24)
           .setSSN('111-22-3333')
)

Que ce soit ou non le meilleur Je ne peux pas dire quel est le style/idée pour Python, mais c'est un peu comme ça que ça se présenterait en Java.

0voto

JustCode Points 162

Il y a de multiples choix qui dépendent entièrement de votre scénario complet -

  1. Chaîne de responsabilité - Si vos différentes classes doivent suivre une chaîne d'opérations.
  2. Décorateur - Lorsque vous ne savez pas quelle séquence vous devez ajouter des fonctionnalités supplémentaires à votre objet de classe.
  3. Builder - qui vous aidera à attribuer des valeurs de paramètres à votre classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X