面向对象编程适合小脚本吗?

29 投票
17 回答
6110 浏览
提问于 2025-04-15 23:57

我主要写一些小脚本,使用的是Python,代码大概在50到250行之间。我通常不使用任何对象,只是简单的过程式编程。

我知道面向对象编程(OOP)的基本概念,也在其他编程语言中用过对象,但对于小脚本来说,我看不出使用对象有什么好处。不过,也许这只是我对面向对象编程了解得不够多。

我是不是错过了什么,如果不更努力地使用对象,或者说面向对象编程对于小脚本来说根本就不太合适?

17 个回答

10

在面向对象编程中,有一个不太好的习惯叫做“对象妄想症”——就是在我们写的每一段代码中都看到对象的影子。

这种情况发生的原因是我们误以为存在一个统一的对象理论。

当你写代码时,你会开始把它看作是对象的模板,以及它们如何融入你自己的思维框架中。即使只是一个小任务,我们也会忍不住问自己——这段代码我能不能放到我的类库里,以后也能用到呢?我能不能在这里找到和我之前写的代码相似的模式,或者是我将来可能会写的代码?我能不能把现在的任务结构化成这些模式中的一种呢?

这真是个让人烦恼的习惯。很多时候,不如不这样想。但当你发现自己写的每一段代码都能找到某种模式,并且你不断调整这些模式以满足大部分需求时,你会感到一种满足感和成就感。

问题在于,当一个程序员变得过于执着(有点强迫症)时,他们可能会忽视模式中的例外情况,试图过度调整模式以适应更多情况,这样是错误的。这就像我小时候,每天早上吃早餐时都想把面包涂满黄油或果酱,有时候其实不涂那么满反而更好。我们有时需要放下面向对象的思维,快速而简单地完成手头的任务。

业界有个公认的原则叫80-20,这个原则可以作为一个参考。用一种不同的方式来看待这个原则,我们可以说,80%的时间保持面向对象的思维,20%的时间则快速而简单地编码。

沉浸在对象的世界中是好的,但最终你得学会控制它,不要让它吞噬你。

如果你还没有编程足够多,你可能还看不到自己写过的所有模式,也不会开始相信那些你还没用过的模式。当你开始看到这种“对象妄想症”的迹象时,就要小心不要被它们吞没。

28

面向对象编程(OOP)虽然很有用,可以把系统看作现实世界中的物体(希望能让大型软件系统更容易理解),但它并不是解决所有问题的灵丹妙药(尽管有些人这样教)。

如果你的系统并没有从OOP中获得好处(比如数据抽象、封装、模块化、多态和继承这些特性),那么使用OOP带来的额外复杂性就没有必要了。不过,如果你发现随着系统的增长,这些特性变得越来越重要,那么你可能需要考虑转向OOP的解决方案。

编辑:作为更新,你可以去维基百科看看关于OOP的各种批评文章。记住,OOP只是一个工具,就像你不会用锤子做所有事情一样,OOP也不应该用在所有场合。要考虑选择最合适的工具来完成工作。

33

我会根据具体问题选择最合适的编程方式,比如过程式编程、面向对象编程(OOP)、函数式编程等等。程序的大小并不是决定因素,不过一般来说,较大的程序更有可能利用面向对象编程的优势,比如可以创建多个类的实例、子类和重写、特殊方法的重载、OOP设计模式等等。这些机会在小脚本中也可以出现,只是大程序出现这些情况的概率稍微高一些。

另外,我非常不喜欢使用global这个声明,所以如果自然的过程式方法需要用到它,我几乎总是会选择面向对象编程,即使唯一的好处只是可以使用带有限定名的变量,而不是需要global的简单变量。

其实没有必要“更加努力”去寻找机会,只需要问自己“这里有没有机会使用多个实例(等等)”,很快这就会变成你的第二天性,也就是说,你会自然而然地发现这些机会,而不需要每次都提醒自己去寻找它们,这样你的编程水平也会因此提高。

撰写回答