我记得有一次,据说Python不像Ruby那样面向对象,因为在Ruby中,一切都是对象.Python也改变了吗?最新的Python是否比以前的版本更面向对象?
Bra*_*des 40
Jian Lin - 答案是"是",Python比Matz决定创建Ruby更加面向对象,现在这两种语言都以"一切都是对象"为特色.当Python更年轻时,"类型"(如字符串和数字)缺少方法,而"对象"是使用"类"语句(或故意在C扩展模块中构建类)构建的,并且效率稍低但是支持方法和继承.在20世纪90年代早期,当快速386是一台相当不错的机器时,这种妥协是有道理的.但是类型和类在Python 2.2(2001年发布)中统一,字符串得到了方法,在更新的Python版本中,用户甚至可以从它们中继承.
所以:Python当然不那么面向对象; 但是,据我所知,现在每一个旧的障碍都消失了.
以下是发生统一的指南:
http://www.python.org/download/releases/2.2/descrintro/
澄清:或许我可以更简单地说:在Python中,一切都是一个对象; 但是一些基本类型的对象(整数,字符串)曾经被"不同的规则"所阻止,这些规则阻止了OO编程方法(如继承)与它们一起使用.现在已经修复了.另一个响应中描述的len()方法可能是我希望Guido在升级到Python 3.0时改变的唯一方法.但至少他给了我字典理解,所以我不会抱怨太大声.:-)
Jas*_*ker 12
我不确定我是否认为Ruby比Python更面向对象.面向对象不仅仅是使用对象和点语法.我看到的一个常见论点是,在Python中获取列表的长度,你可以这样做:
len(some_list)
Run Code Online (Sandbox Code Playgroud)
我认为这是一个矛盾的论点.这真正转化为(几乎直接)是这样的:
some_list.__len__()
Run Code Online (Sandbox Code Playgroud)
这是完全面向对象的.我认为Rubyists可能会有点困惑,因为通常面向对象涉及使用点语法(例如object.method()).但是,如果我误解了Rubyists的论点,请随时告诉我.
无论面向对象如何,以这种方式使用len都有一个优点.有一两件事,总是让我生气的一些语言是有记忆是否使用some_list.size()或some_list.length()或some_list.len特定对象.Python的方式意味着只需记住一个功能
虽然这不是一个恰当的答案......为什么你关心Python或多或少的OO?Python的酷炫之处在于它是pythonic,而不是面向对象或功能,或者是目前流行的范例!:-)
我学会了使用Java和面向对象进行编程,但是现在我没有给出任何关于它的信息,因为我知道OOP不是所有问题的解决方案(实际上,没有单一的范例).
看到: