Pregunta

Estoy escribiendo una pequeña pieza de código en Python y estoy curioso lo que otros piensan de esto.

Tengo un par de clases, cada uno con un par de métodos, y estoy tratando de determinar lo que es "mejor": para pasar objetos a través de llamadas a métodos, o para pasar a métodos a través de llamadas a métodos cuando se necesita sólo un método de un objeto. Básicamente, debería hacer esto:

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

o este

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

A mi modo de ver, el segundo es discutible "mejor" porque promueve aún más suelta de acoplamiento de cohesión / fuerte entre la manipulación y la otra clase. Tengo curiosidad por ver algunos argumentos a favor y en contra de este enfoque para los casos en que se necesita sólo un único método de un objeto.

EDIT: I elimina la redacción programación orientada a objetos, ya que fue alterando con claridad. Me refiero sobre todo a bajo acoplamiento y alta cohesión.

¿Fue útil?

Solución

La segunda solución puede proporcionar un acoplamiento más flexible porque es más "funcional", no más "OOP". La primera solución tiene la ventaja de que funciona en lenguajes como C ++ que no tienen cierres (aunque uno puede conseguir un efecto similar utilizando plantillas y puntero-a-miembro-funciones); pero en un lenguaje como Python, en mi humilde opinión la segunda alternativa parece ser más "natural".

EDIT: encontrará una muy buena discusión de "objeto vs. funcional orientada a" técnicas en el libro libre "orden superior Perl", disponible aquí:

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

(mirada en el capítulo 1, parte 6). A pesar de que es un libro de Perl (un Python y no), la discusión no se ajusta exactamente a la pregunta planteada aquí, y las técnicas funcionales descrito allí se puede aplicar a Python de una manera similar.

Otros consejos

I will say the second approach ; because it's definitely look like a callback which they are very used when using the Hollywood principle (don't call us we will call you) which is a paradigm that assists in the development of code with high cohesion and low coupling [Ref 2] .

I would definitely go with the second approach.

Also consider that you could change the interface of whatever Manipulator class so that process is instead spelled __call__, and then it will work transparently with the second approach.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top