Python是否更加面向对象了?

9 投票
6 回答
1739 浏览
提问于 2025-04-15 11:45

我记得曾经有人说过,Python的面向对象特性比Ruby要少,因为在Ruby中,所有东西都是对象。那么,Python现在有变化吗?最新的Python版本在面向对象方面比之前的版本更强了吗?

6 个回答

7

虽然这不算是个正式的回答……你为什么在乎Python是更面向对象还是更面向过程呢?Python最酷的地方在于它是Pythonic,而不是某种流行的面向对象、函数式或其他编程风格!:-)

我最开始是用Java和面向对象编程学的编程,但现在我根本不在乎这些,因为我知道面向对象并不是解决所有问题的办法(实际上,没有一种编程风格可以解决所有问题)。

看看这些:

12

我不太相信有人会说Ruby比Python更面向对象。面向对象不仅仅是使用对象和点语法这么简单。一个常见的观点是,在Python中,要获取列表的长度,你需要这样做:

len(some_list)

我觉得这就像是一个小题大做的争论。其实这可以直接理解为:

some_list.__len__()

这也是完全符合面向对象的原则。我觉得Ruby的使用者可能会有些困惑,因为通常面向对象的编程会使用点语法(比如 object.method())。不过,如果我误解了Ruby使用者的观点,请随时告诉我。

不管这个问题是否涉及面向对象,使用len函数有一个好处。让我一直感到烦恼的是,有些语言让我记不清楚该用 some_list.size()some_list.length() 还是 some_list.len 来获取某个对象的长度。而Python的方式只需要记住一个函数就可以了。

40

Jian Lin — 答案是“是的”,Python比Matz当初想创造Ruby时更面向对象,现在这两种语言都实现了“万物皆对象”。在Python刚开始的时候,像字符串和数字这样的“类型”没有方法,而“对象”是通过“类”语句创建的(或者通过在C扩展模块中专门构建一个类),虽然效率稍差,但支持方法和继承。在1990年代初,当时快速的386电脑算是不错的机器,这种妥协是有道理的。但在2001年发布的Python 2.2中,类型和类被统一了,字符串也获得了方法,而在更新的Python版本中,用户甚至可以从字符串派生出新的类。

所以:Python曾经确实不那么面向对象;但据我所知,所有这些旧的限制现在都已经消失了。

这里是关于这一统一过程的指南:

http://www.python.org/download/releases/2.2/descrintro/

澄清:也许我可以更简单地说:在Python中,一直以来一切都是对象;但一些基本类型的对象(整数、字符串)曾经遵循“不同的规则”,这使得面向对象编程的方法(比如继承)无法使用。现在这个问题已经解决了。len()方法,在这里的另一个回答中提到,可能是我希望Guido在升级到Python 3.0时能改变的唯一一件事。不过至少他给了我字典推导式,所以我不会抱怨得太大声。:-)

撰写回答