发明Ruby的Matz说他设计的语言比Python更面向对象。 Ruby如何比Python更面向对象?
答案 0 :(得分:22)
如果从1993年开始使用Python并将其与Ruby进行比较,则后者更加面向对象。然而,在overhaul in Python 2.2之后这不再是真的。我会说现代Python就像面向对象一样。
答案 1 :(得分:15)
通常给出的一个例子是len
,它在Python中是一个内置函数。您可以在对象中实现一个特殊的__len__
方法,该方法将由len
调用,但len
仍然是一个函数。在Ruby中,对象只有.length
属性/方法,所以当你说obj.length
而不是len(obj)
时,它看起来更像面向对象,尽管深层次的内容几乎发生了相同的事情。
也就是说,多年来Python已经朝着更加面向对象的方向发展。目前,所有对象(以及隐式的用户定义对象)都继承自object
类。还添加了元类,并且在ABCs(抽象基类)的帮助下,许多内置和核心库类已被组织成层次结构。
在我大量使用Python的过程中,我从来没有发现它在OO部门中缺乏。它可以做我想要它与对象做的一切。确实,Ruby 感觉更纯粹是OO,但至少根据我的经验,这并不是一个真正的实际问题。
答案 2 :(得分:9)
来自WikiVS,
...在Ruby中,所有函数和大多数运算符实际上都是对象的方法,许多Python函数都是过程函数而不是方法。
Ruby的创建者Matz的以下interview为您的问题和上述观点提供了额外的背景。
...
斯图尔特:让我们从一点历史开始吧。你为什么决定写Ruby?
Matz :早在1993年,我就与一位同事谈论脚本语言。他们的力量和可能性让我印象深刻。我觉得编写脚本是可以的。
作为一个长期面向对象的编程爱好者,在我看来,OO编程也非常适合编写脚本。然后我环顾网络。我发现尚未发布的Perl 5将实现OO功能,但它并不是我想要的。我放弃了Perl作为面向对象的脚本语言。
然后我遇到了Python。它是一种解释性的,面向对象的语言。但我不觉得它是一种“脚本”语言。此外,它是程序编程和面向对象编程的混合语言。
我想要一种比Perl更强大的脚本语言,以及比Python更面向对象的。这就是为什么我决定设计自己的语言。
...
答案 3 :(得分:-2)
很简单,Ruby中的几乎所有(包括数字)都是一个对象;没有标量值。