首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python变得更面向对象了吗?

Python变得更面向对象了吗?
EN

Stack Overflow用户
提问于 2009-05-21 18:56:04
回答 6查看 1.7K关注 0票数 9

我记得有一次,it was said that Python is less object oriented than Ruby,因为在Ruby语言中,一切都是对象。对于Python,这种情况也发生了变化吗?最新的Python是不是比以前的版本更面向对象?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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时所做的唯一更改。但至少他给了我字典上的解释,所以我不会抱怨得太大声。:-)

票数 40
EN

Stack Overflow用户

发布于 2009-05-21 19:03:44

我不确定我是否相信Ruby比Python更面向对象的观点。面向对象不仅仅是使用对象和点语法。我看到的一个常见的论点是,在Python中,要获得列表的长度,您可以这样做:

代码语言:javascript
运行
复制
len(some_list)

我认为这是一个bikeshed argument。这实际上(几乎是直接地)转化为:

代码语言:javascript
运行
复制
some_list.__len__()

它是完全面向对象的。我认为Rubyists使用者可能会有点困惑,因为面向对象通常涉及到使用点语法(例如object.method())。但是,如果我误解了know拥护者的观点,请随时告诉我。

不管它是面向对象的,以这种方式使用len有一个优点。有些语言总是让我恼火的一件事是,必须记住是对特定对象使用some_list.size()some_list.length()还是some_list.len。Python的方式意味着只需要记住一个函数

票数 12
EN

Stack Overflow用户

发布于 2009-05-21 19:36:28

尽管这不是一个恰当的答案...为什么你会关心Python是不是OO呢?关于Python最酷的事情是,它是Python式的,而不是面向对象或函数式的,或者任何目前流行的范例!:-)

我学会了用Java和面向对象编程,但现在我对此不置可否,因为我知道OOP并不是解决所有问题的办法(事实上,没有一个单一的范例可以)。

请参见:

  • The Zen of Python
  • What is Pythonic
  • Be Pythonic
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/894502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档