我有一些R方面的经验,最近我开始学习一些python。我知道python中的方法和函数以及如何在对象上调用它们之间存在一些差异,但是我看不到在python中一般使用方法的好处。
对我来说,使用方法只会增加另一种混乱,因为在R中,我可以仅通过使用函数来完美地编写所有代码。但是现在,在python中,在对象上应用方法的语法有所不同,某些方法会更改调用它们的对象,而某些方法仅适用于某些特殊的对象类。
所以,请原谅我问:有人开发方法只是为了使一切变得更加复杂,还是有人开发方法?
答案 0 :(得分:2)
我也认为这是基于我的理解而提出的(如果愿意,我很乐意删除我的答案),但是我确实相信他们每个人都有自己的位置。 Judging solely by the merits of their differences,方法在类的外部不存在,因此它们特定于类本身。
考虑此类Person
:
Class Person():
# ...
def eat(self, food):
return self.poop(food)
然后您可以调用john.eat(burger)
,对于任何新手来说,维护新代码库都是完全可读的代码。但是功能eat(john, burger)
可能更像是一个大脑屁,因为现在您需要辨别哪个对象正在执行eat()
函数,哪个对象正在返回poop()
。这可能会提示您不必要地窥视eat()
定义。另外,eat()
在Food
类的上下文中没有意义,因此它实际上并不需要是所有对象都可以访问的函数。因此,您可以在这方面进行范围界定。
也就是说,更通用的功能(例如type()
或id()
可能更有意义地存在于类之外,因为它们可以应用于广泛的类,并成为DRY的良好实践在定义上。
总而言之,这很大程度上取决于您的代码结构。因此,恕我直言,每次使用都是自觉的。