joh*_*nny 46 ruby python language-comparisons object
对另一个Stack Overflow问题的评论指出,Python就像Ruby一样,因为它与"一切都是对象"有关,而Python中的所有内容都是一个对象,就像Ruby一样.
这是真的?像ruby一样,python中的所有东西都是对象吗?
两者在这方面有何不同,或者它们是否真的相同?例如,你可以拿一个号码来做我看过的红宝石:
y = 5.plus 6
Run Code Online (Sandbox Code Playgroud)
可以在Python中以相同的方式完成吗?
Unk*_*own 69
Python中的所有东西都是一个对象,几乎所有东西都有属性和方法.所有函数都有一个内置属性
__doc__,它返回函数源代码中定义的doc字符串.sys模块是一个对象,其中包含一个名为path的属性(除其他外).等等.不过,这引出了一个问题.什么是对象?不同的编程语言以不同的方式定义"对象".在某些情况下,这意味着所有对象必须具有属性和方法; 在其他情况下,这意味着所有对象都是可子类化的.在Python中,定义更宽松; 一些对象既没有属性也没有方法(第3章中有更多内容),并且并非所有对象都是可子类化的(在第5章中有更多内容).但是在某种意义上,一切都是一个对象,它可以被赋值给一个变量,或者作为一个参数传递给一个函数(在第4章中有更多内容).
和Python一样,在Ruby中......一切都是对象
所以你可以从Ruby自己的网站获得它:在Python中,一切都是对象.
Kat*_*add 40
虽然一切都是Python中的对象,但它在解析名称和与对象交互的方法上与Ruby不同.
例如,虽然Ruby在Object基类上为您提供了'to_s'方法,但为了公开该功能,Python将其集成到字符串类型本身 - 您通过从中将字符串构造为字符串将其转换为字符串.而不是5.to_s,你有str(5).
不过,不要被愚弄.幕后还有一种方法 - 这就是为什么这段代码有效:
(5).__str__()
Run Code Online (Sandbox Code Playgroud)
所以在实践中,两者基本相似,但你使用它们的方式不同.Python中列表和元组之类的序列的长度是这个原理工作的另一个例子 - 实际的特性建立在具有特殊名称的方法之上,但是通过更简单,更易于使用的界面(len函数)公开.
因此,你在问题中写的python相当于:
(5).__add__(6)
Run Code Online (Sandbox Code Playgroud)
另一个重要的区别是全球功能的实施方式.在python中,全局变量由字典表示(就像本地人一样).这意味着以下内容:
foo(5)
Run Code Online (Sandbox Code Playgroud)
在python中等效于此:
globals()["foo"].__call__(5)
Run Code Online (Sandbox Code Playgroud)
虽然ruby有效地做到了这一点:
Object.foo(5)
Run Code Online (Sandbox Code Playgroud)
这对使用两种语言编写代码时使用的方法有很大影响.Ruby库倾向于通过向Object等现有类型添加方法而增长,而Python库往往通过向给定模块添加全局函数来增长.
Ale*_*lli 21
对于Python和Ruby来说,"一切"都有点过分 - 例如,if它不是"一个对象",而是一个用于启动条件语句或(在Python中)列表推导和生成器表达式内的关键字.发现函数,类,方法以及所有那些在C++中不是真正对象的东西的热情是Ruby或Python中的对象,引起了这种热情.其他东西可能是Ruby中的对象,但不是Python或反之(代码块,正则表达式......).
Ric*_*dle 20
在回答你的第二个问题时,是的:
>>> (1).__add__(2)
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23828 次 |
| 最近记录: |