首页 > 技术文章 > python everything is object

tom-zhao 2014-08-13 22:57 原文

python面向对象非常彻底,即使过程式的代码风格,python在运作的时候也是面向对象的。everything is object。

差异

在面向对象的理念上,python和非常工程化的面向对象语言(C++、Java、C#)有巨大的差异,这些语言,为了解释他们的原理,往往会祭出一大杀器-----内存模型。用单纯的、非常过称化的说明原理运行过程。(当然我并没有说这个有什么不好,这样是比较直接、简单的。)python讲到最深处,它会给你讲很多对象的故事。除非要深入解释器,如果深入解释器,那又是C++、Java、C#的事情了。那我们讲一个非常深入而简单的例子,内存对象。5是一个数字,但也是一个对象,所有的对象都要受着python环境的管理,运行python命令

>>> id(5)
19867920
>>> dir(4)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '_
_divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs_
_', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__
', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow
__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '
__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshi
ft__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '_
_subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', '
imag', 'numerator', 'real']

可以看到,python环境中数值4、5。也是是python的一个对象。具有普通对象一样的性质。差异最明显的地方,往往是我们忽视的地方。python的type也是一种对象(用type()尝试一下获取int,long,type),而int,long,str则是类型,是元数据。是语言解释不了的,而直接套用了硬件的一些理念。

 

好了讲了一些python在一些旮旯里边的东西,C++11好像是一门新的语言(好老了,今天刚刚了解了一下,auto、decltype和for的引入,才是让我现在觉得最舒服的地方啊)还没开始用C++11呢。比起以前的版本差异好大啊 。。。。我好落后啊。

 

推荐阅读