Ruby为什么比Python更面向对象?
发明Ruby的Matz说,他设计这个语言的时候,想让它比Python更注重面向对象的编程。那么,Ruby到底是怎么比Python更面向对象的呢?
4 个回答
来自 WikiVS,
… 在Ruby中,所有的函数和大部分操作符实际上都是对象的方法,而在Python中,有一些函数是过程函数,而不是方法。
下面这段 采访 是对Ruby创始人Matz的访谈,能为你的问题和上面的观点提供更多背景。
…
Stewart: 我们先来聊聊历史。你为什么决定要写Ruby呢?
Matz: 在1993年,我和一个同事讨论脚本语言。我对它们的强大和可能性感到很惊讶。我觉得脚本语言是未来的方向。
作为一个长期喜欢面向对象编程的人,我觉得面向对象编程也非常适合脚本编写。然后我在网上查了一下。我发现Perl 5还没发布,但它要实现面向对象的特性,不过这并不是我想要的。我放弃了把Perl当作面向对象的脚本语言。
接着我遇到了Python。它是一种解释型的面向对象语言。但我觉得它不算是“脚本”语言。此外,它是过程编程和面向对象编程的混合语言。
我想要一种比Perl更强大、而且比Python更面向对象的脚本语言。这就是我决定设计自己语言的原因。
…
一个常见的例子是 len
,在 Python 中这是一个内置函数。你可以在自己的对象里实现一个特殊的 __len__
方法,这样当你用 len
去调用这个对象时,就会执行你定义的这个方法,但 len
依然是一个函数。在 Ruby 中,对象有一个 .length
属性/方法,所以当你说 obj.length
时,听起来更像是面向对象的写法,而不是 len(obj)
,虽然在底层其实发生的事情差不多。
不过,随着时间的推移,Python 逐渐向更面向对象的方向发展。目前,所有对象(包括用户自定义的对象)都继承自 object
类。还增加了元类,并且许多内置和核心库的类都被组织成了层次结构,借助了 ABC(抽象基类)的帮助。
在我大量使用 Python 的过程中,我从未觉得它在面向对象方面有什么不足。它可以完成我想用对象做的所有事情。确实,Ruby 给人的感觉更纯粹一些,但至少在我的经验中,这并没有成为一个实际的问题。
如果你拿1993年的Python和Ruby来比的话,Ruby在面向对象编程方面做得更好。不过,自从Python 2.2进行了大改版之后,这种说法就不成立了。我可以说,现在的Python在面向对象编程方面已经非常强大了。