Quelle est la pratique « mieux »? Transmission de références d'objets ou références de méthode objet en Python

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

Question

Je suis en train d'écrire un petit morceau de code en Python et je suis curieux de ce que les autres pensent de cela.

J'ai quelques classes, chacune avec quelques méthodes, et essaie de déterminer ce qui est « mieux »: pour passer des objets par le biais des appels de méthode, ou de passer des méthodes par les appels de méthode quand une seule méthode à partir d'un objet est nécessaire. En fait, je devrais faire ceci:

def do_something(self, x, y, manipulator):
    self.my_value = manipulator.process(x, y)

ou ce

def do_the_same_thing_but_differently(self, x, y, manipulation):
    self.my_value = manipulation(x, y)

La façon dont je le vois, le second est sans doute « mieux », car il favorise le couplage même plus souple / plus forte cohésion entre la manipulation et l'autre classe. Je suis curieux de voir quelques arguments pour et contre cette approche pour les cas où une seule méthode est nécessaire à partir d'un objet.

EDIT: Je retire le libellé de la POO parce qu'il dérangeait clairement. Je faisais référence principalement à couplage lâche et une forte cohésion.

Était-ce utile?

La solution

La deuxième solution peut fournir couplage plus souple car il est plus « fonctionnelle », pas plus « OOP ». La première solution a l'avantage que cela fonctionne dans les langues comme le C ++ qui n'ont pas la fermeture (si l'on peut obtenir un effet similaire en utilisant des modèles et pointeur membres à fonctions); mais dans un langage comme Python, à mon humble avis la 2ème solution semble être plus « naturelle ».

EDIT: vous trouverez une discussion très agréable de « objet fonctionnel par rapport orienté » techniques dans le livre gratuit « ordre supérieur Perl », disponible ici:

http://hop.perl.plover.com/

(coup d'oeil dans le chapitre 1, partie 6). Bien qu'il soit un Perl (et non un Python) livre, la discussion il correspond exactement à la question posée ici, et les techniques fonctionnelles décrites, il peut être appliqué à Python d'une manière similaire.

Autres conseils

Je vais dire la deuxième approche; parce qu'il est vraiment regarder comme un rappel qu'ils sont très utilisés lorsque vous utilisez le Hollywood principe (ne nous appelez pas, nous vous appellerons) qui est un paradigme qui aide dans le développement de le code avec une grande cohésion et couplage faible [Ref 2 ].

Je certainement aller avec la deuxième approche.

Considérez également que vous pouvez changer l'interface de quelque classe Manipulateur de telle sorte que process est la place orthographié __call__, et il fonctionnera de manière transparente avec la deuxième approche.

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