我记得有一次,it was said that Python is less object oriented than Ruby,因为在Ruby语言中,一切都是对象。对于Python,这种情况也发生了变化吗?最新的Python是不是比以前的版本更面向对象?
发布于 2009-05-21 19:32:01
Jian Lin -答案是“是的”,与Matz决定创建Ruby时相比,Python更加面向对象,两种语言现在都具有“一切都是对象”的特点。在Python还很年轻的时候,像字符串和数字这样的“类型”缺少方法,而“对象”是用" class“语句(或者故意在C扩展模块中构建类)构建的,效率稍低,但确实支持方法和继承。在20世纪90年代早期,当fast 386是一台相当不错的机器时,这种妥协是有意义的。但是在Python2.2(发布于2001年)中,类型和类是统一的,字符串获得了方法,在更新的Python版本中,用户甚至可以从它们继承子类。
所以: Python曾经肯定不太面向对象;但是,据我所知,所有这些旧的障碍现在都消失了。
以下是统一过程的指南:
http://www.python.org/download/releases/2.2/descrintro/
Clarification:也许我可以说得更简单:在Python语言中,所有东西都是对象;但是一些基本的对象(int,字符串)曾经由“不同的规则”扮演,它们阻止了OO编程方法(如继承)与它们一起使用。现在这个问题已经解决了。在这里的另一个响应中描述的len()方法,可能是我希望Guido在升级到Python3.0时所做的唯一更改。但至少他给了我字典上的解释,所以我不会抱怨得太大声。:-)
发布于 2009-05-21 19:03:44
我不确定我是否相信Ruby比Python更面向对象的观点。面向对象不仅仅是使用对象和点语法。我看到的一个常见的论点是,在Python中,要获得列表的长度,您可以这样做:
len(some_list)
我认为这是一个bikeshed argument。这实际上(几乎是直接地)转化为:
some_list.__len__()
它是完全面向对象的。我认为Rubyists使用者可能会有点困惑,因为面向对象通常涉及到使用点语法(例如object.method()
)。但是,如果我误解了know拥护者的观点,请随时告诉我。
不管它是面向对象的,以这种方式使用len有一个优点。有些语言总是让我恼火的一件事是,必须记住是对特定对象使用some_list.size()
、some_list.length()
还是some_list.len
。Python的方式意味着只需要记住一个函数
发布于 2009-05-21 19:36:28
尽管这不是一个恰当的答案...为什么你会关心Python是不是OO呢?关于Python最酷的事情是,它是Python式的,而不是面向对象或函数式的,或者任何目前流行的范例!:-)
我学会了用Java和面向对象编程,但现在我对此不置可否,因为我知道OOP并不是解决所有问题的办法(事实上,没有一个单一的范例可以)。
请参见:
https://stackoverflow.com/questions/894502
复制相似问题