我正在用Python写一小部分代码,很好奇别人对此的看法。

我有几个类,每个类都有几种方法,并且正在尝试确定什么是“更好”:通过方法调用将对象传递,或者在只需要从对象的一种方法中传递方法调用。基本上,我应该这样做:

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

或这个

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

我的看法,第二个可以说是“更好的”,因为它可以促进操纵和另一个类之间更松散的耦合/更强的凝聚力。当对象只需要单个方法时,我很想看到对这种方法的一些论点和反对这种方法。

编辑: 我删除了OOP措辞,因为它显然令人沮丧。我主要指的是松散的耦合和高凝聚力。

有帮助吗?

解决方案

第二个解决方案可能会提供更宽松的耦合,因为它更“功能”,而不是更多的“ OOP”。第一个解决方案的优点是它在没有封闭的C ++等语言中起作用(尽管使用模板和指针到会员函数可以获得类似的效果);但是在像Python这样的语言中,恕我直言,第二个选择似乎更自然。

编辑:您会在免费书籍“高级perl”中找到“功能与对象的”技术的非常好的讨论,可在此处提供:

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

(查看第1章,第6部分)。尽管这是一本Perl(不是Python)的书,但那里的讨论完全适合这里所要求的问题,并且所描述的功能技术可以以类似的方式应用于Python。

其他提示

我会说第二种方法;因为它绝对看起来像个 打回来 使用它们时,它们在使用 好莱坞原则 (不要打电话给我们我们会打电话给您)这是一个有助于以高凝聚力和低耦合的代码开发的范式[参考 2] .

我一定会采用第二种方法。

还要考虑您可以更改任何操纵器类的界面,以便 process 而是拼写 __call__, ,然后它将与第二种方法透明地工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top