何时应该使用类,何时应该使用函数?

5

何时使用类比使用函数更有用?是否有任何我应该知道的硬性或快速规则?这与语言有关吗?我打算编写一个Python脚本,用于解析不同类型的json数据,我的直觉告诉我应该使用类来完成这个任务,而不是使用函数。


4
这是一个主观性问题。 - David Heffernan
1
这是两个不同的概念。类是“它是什么”,函数是“它做什么”。烤面包机是一个类,而烤面包的功能是该类的一个函数。 - jb.
它是与语言相关的(如果语言不支持类,则没有类,不一定是面向对象编程,因为可以在没有类的情况下进行面向对象编程),但这个问题是主观的。 - LeleDumbo
5个回答

10

在您的程序需要保存状态时应使用类。否则,函数就足够了。


即使需要保存状态,也可以使用函数,因为它们可以具有任意属性。不过,与函数相比,创建和维护多个类的实例更容易。 - martineau
然而,函数也没有方便的方式来引用自身。 - Ignacio Vazquez-Abrams
它不能只使用 <func name>.attribute 吗? - martineau
当然可以。但是这需要函数知道它自己的名称。self.attribute 更加方便。 - Ignacio Vazquez-Abrams
如果只有一个名称,那么知道它自己的名称并不是问题。这就是我最初评论的重点,即需要保存状态并不是关键因素,因为函数也能够做到这一点。相反,关键是你是否需要同时拥有多个独立状态。 - martineau

4

首先,我认为这不依赖于语言(只要语言允许您定义类和函数)。

一般规则是,类封装了一个行为。因此,如果您需要实现某种类型的服务(例如,使用不同的函数),那么类就是您要寻找的东西。
此外,类(更准确地说是对象)具有状态,并且您可以实例化更多类的实例(因此获得不同状态的不同对象)。

同样重要的是,类可以被继承:因此,您可以仅通过小的更改覆盖函数的特定行为。


在不支持类的语言中,你如何使用类进行编程? - LeleDumbo
@LeleDumbo:很明显,这不是与语言相关的问题,只要语言支持函数定义即可。但这是基础知识,无需在答案中提供更多细节。 - DonCallisto
+1 我最喜欢这个解释:它关乎行为的封装。我认为其他人谈论状态时都忽略了一个重要的点。 - Peter Wippermann

1

当你有一个状态 - 一些应该在调用之间保持不变的东西时,使用类。

在其他情况下使用函数。

例外情况:如果你的类只存储了几个值,并且除了__init__方法之外只有一个方法,那么最好使用函数。


1

对于任何不太琐碎的问题,您应该使用一个类。我倾向于将所有“自由浮动”的函数限制在utils.py文件中。


1

这是与语言相关的。

有些语言,比如Java,坚持要求你为所有东西使用类。根本没有独立函数的概念。

Python不是这样的。定义独立函数是完全可以的 - 实际上是推荐的,相关函数可以分组在模块中。正如其他人所说,只有当你需要保留状态 - 即封装对象内部数据时,才真正需要在Python中使用类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接