|
|
1
2
在python中,每个对象都有
一
名称空间——对象的“属性”(可在该名称空间中访问)可以是方法、对其他对象的简单引用(可调用或不可调用),也可以是动态合成的
descriptors
(普通属性可能存在于实例或类中,但描述符(包括作为合成方法的描述符的函数)仅在它们存在于类中而不是实例中时使用;因此,特别是“特殊方法”只有在类中定义时才是特殊的,而不是在实例中定义时)。属性处理内置和特殊方法(
关键是对于任何对象
在Ruby中,对象的方法和属性位于不同的名称空间中(这样您就可以拥有一个具有相同名称的方法和属性的对象,而在python中您不能这样做),并且“只提到”一个无参数的方法隐式地调用它(所以
smalltalk也有单独的名称空间,如ruby,但是您不能引用给定对象的“non-method”属性(每个对象只“看到”自己的属性),因此不会出现这种歧义(但您仍然需要使用特定的消息来提取,然后调用“method-reference”)。 |
|
|
2
2
我记得python和smalltalk的主要区别是处理属性隐私的方式。在smalltalk中,我定义了属性,必须立即生成所有的访问器(幸运的是,Dolphin smalltalk做到了这一点)并使用它们。另一方面,在python中,任何东西都可以被访问,甚至是被认为是私有的属性(那些在开始时带有_uuuuu的属性,这些属性被破坏成了_uuuuuuuuu)。有些人可能会说,这有潜在的危险——比如,在将来的某个时候,当您更改某个属性时,您需要执行一些操作。但是python很优雅地解决了它, properties . 我喜欢这样的想法,我可以得到我想要的任何东西。如果我知道,我在做什么,我就能做到:—) |