哪个是“更好”的做法?在Python中传递对象引用或对象方法引用

2024-04-24 12:54:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一小段代码,我很好奇其他人对此有何看法。在

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

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

或者这个

^{pr2}$

在我看来,第二个可以说是“更好的”,因为它促进了操作和其他类之间更松散的耦合/更强的内聚性。我很好奇地看到一些支持和反对这种方法的论据,当一个对象只需要一个方法时。在

编辑:我删除了“面向对象”的措辞,因为这显然令人不安。我主要指的是松散耦合和高内聚。在


Tags: 对象方法代码selfvaluemydefprocess
3条回答

我要说第二种方法;因为它看起来绝对像一个callback,它们在使用Hollywood principle(不要叫我们我们,我们称你为你)时使用得非常多,这是一种帮助开发具有高内聚性和低耦合性的代码的范式[Ref2]。在

我肯定会同意第二种方法。在

还可以考虑更改任何操纵器类的接口,使process改为__call__,然后它将透明地与第二种方法一起工作。在

第二种解决方案可能提供更松散的耦合,因为它更“功能性”,而不是“OOP”。第一个解决方案的优点是它在C++等语言中工作,它没有闭包(虽然可以使用模板和指针到成员函数来获得类似的效果);但是在像Python这样的语言中,IMHO第二个选择似乎更“自然”。在

编辑:您将在免费书籍“Higher order Perl”中找到关于“函数式与面向对象”技术的非常好的讨论,该书可从以下网址获得:

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

(请参阅第1章第6部分)。虽然这是一本Perl(而不是Python)的书,但是这里的讨论正好适合这里提出的问题,并且其中描述的函数技术也可以以类似的方式应用到Python中。在

相关问题 更多 >