Python 中的一切都是对象,就像 Ruby 一样吗?

2025-01-15 08:45:00
admin
原创
142
摘要:问题描述:我在另一个 Stack Overflow 问题上看到,Python 就像 Ruby 一样,因为它与“一切皆对象”有关,并且 Python 中的一切都是对象,就像 Ruby 一样。这是真的吗?Python 中的一切都是对象,就像 Ruby 一样吗?在这方面两者有何不同,或者它们真的相同吗?例如,你能否...

问题描述:

我在另一个 Stack Overflow 问题上看到,Python 就像 Ruby 一样,因为它与“一切皆对象”有关,并且 Python 中的一切都是对象,就像 Ruby 一样。

这是真的吗?Python 中的一切都是对象,就像 Ruby 一样吗?

在这方面两者有何不同,或者它们真的相同吗?例如,你能否接受一个数字并执行我见过的 Ruby 操作,例如:

y = 5.plus 6

可以在 Python 中以同样的方式完成吗?


解决方案 1:

DiveIntoPython - 一切皆对象

Python 中的一切都是对象,几乎所有东西都有属性和方法。所有函数都有一个内置属性__doc__,它返回doc string函数源代码中定义的。sys模块是一个对象,它(除其他外)具有一个名为的属性path。等等。

但这又引出了一个问题。什么是对象?不同的编程语言对“对象”的定义不同。在某些语言中,它意味着所有对象都必须具有属性和方法;在其他语言中,它意味着所有对象都是可子类化的。在 Python 中,定义比较宽松;有些对象既没有属性也没有方法(更多内容请参见第 3 章),并且并非所有对象都是可子类化的(更多内容请参见第 5 章)。但一切都是对象,因为它可以分配给变量或作为参数传递给函数(更多内容请参见第 4 章)。

Ruby 文档 - 从 Python 到 Ruby

与 Python 一样,在 Ruby 中......一切都是对象

所以你可以从 Ruby 自己的网站上了解到:在 Python 中一切都是对象。

解决方案 2:

尽管 Python 中的一切都是对象,但它在解析名称和与对象交互的方法上与 Ruby 不同。

例如,虽然 Ruby 在 Object 基类上为您提供了 'to_s' 方法,但为了公开该功能,Python 将其集成到字符串类型本身中 - 您可以通过从类型构造字符串将类型转换为字符串。5.to_s您有 ,而不是str(5)

不过,不要被愚弄。幕后还有一个方法——这就是此代码有效的原因:

(5).__str__()

因此,实际上,两者本质上是相似的,但使用方式不同。Python 中列表和元组等序列的长度是此原则发挥作用的另一个例子 - 实际功能建立在具有特殊名称的方法之上,但通过更简单、更易于使用的接口(len函数)公开。

因此,与你在问题中所写内容等价的 Python 代码为:

(5).__add__(6)

另一个重要的区别是全局函数的实现方式。在 Python 中,全局函数由字典表示(局部函数也是如此)。这意味着以下内容:

foo(5)

相当于 Python 中的这个:

globals()["foo"].__call__(5)

Ruby 有效地做到了这一点:

Object.foo(5)

这对两种语言编写代码时使用的方法有很大影响。Ruby 库往往通过向现有类型添加方法而增长Object,而 Python 库往往通过向给定模块添加全局函数而增长。

解决方案 3:

对于 Python 和 Ruby 来说,“一切”都有点过分了——例如,if它不是“一个对象”,而是用来启动条件语句或(在 Python 中)列表推导和生成器表达式中的关键字。函数、类、方法以及所有这类在(比如)C++ 中不是真正对象的东西在 Ruby 或 Python 中都是对象,这种热情引起了人们的热情。其他东西在 Ruby 中可能是对象,但在 Python 中不是,反之亦然(代码块、正则表达式等)。

解决方案 4:

对于你的第二个问题,答案是肯定的:

>>> (1).__add__(2)
3

解决方案 5:

是的,据我所知,Python 中的一切都是对象。当然,原始类型和内置类型(int、long、str、float 等)可以子类化 - 事实上,类型本身就是对象。函数是对象,类是对象,甚至代码块在某种意义上也是对象……我想不出 Python 中有什么不能被视为对象的东西。

解决方案 6:

你好,答案是出乎意料的,不是全部,参考资料比这更完整,并提供了更多的途径,例如在 Python 3.8.5 中,分隔符、运算符和关键字不是对象。stackoverflow.com/a/66374328/ 11554034

已在该链接中详细解释过,请随意查看。

无论如何,下一条说的是你可以通过以下说法来纠正它(更正确的,尽管如果仍然可以更完整,请随意):
“逻辑行中不是 NEWLINE、INDENT、DEDENT、空格键字符、运算符、关键字或分隔符的所有内容都是 Python 中的对象。”

干杯。

解决方案 7:

对其他人的优秀答案添加一条评论:一切都是对象,但有些(尤其是字符串和数字类型)是不可变的。这意味着这些类型的行为方式与 C 或 Java 等语言(其中整数等不是对象)中的行为方式相同,涉及赋值、参数传递等,并且您永远不必担心通过引用传递造成的陷阱。这是一个很好的解决方案 :-)

解决方案 8:

是的,据我研究,Python 中的一切都是对象。

文档说明如下:

对象是 Python 对数据的抽象。Python 程序中的所有数据都由对象或对象之间的关系表示。

每个对象都有一个身份、一个类型和一个值。

并且,我还检查了每个值的类型以及它们是否都是特定类的实例,如下所示:

from types import FunctionType

class Person:
    pass

def test():
    pass

print(type("Hello"), isinstance("Hello", str))
print(type(100), isinstance(100, int))
print(type(100.23), isinstance(100.23, float))
print(type(100 + 2j), isinstance(100 + 2j, complex))
print(type(True), isinstance(True, bool))
print(type(None), isinstance(None, type(None)))
print(type([]), isinstance([], list))
print(type(()), isinstance((), tuple))
print(type({}), isinstance({}, dict))
print(type({""}), isinstance({""}, set))
print(type(Person), isinstance(Person, type))
print(type(test), isinstance(test, FunctionType))

输出:

<class 'str'> True
<class 'int'> True
<class 'float'> True
<class 'complex'> True
<class 'bool'> True
<class 'NoneType'> True
<class 'list'> True
<class 'tuple'> True
<class 'dict'> True
<class 'set'> True
<class 'type'> True
<class 'function'> True
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3970  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2740  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   79  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   87  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   74  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用