diveintopython.org
Python for experienced programmers

1.4. 每个都是对象

万一你没听到,我刚才说了Python函数有属性,那些属性在运行时可用。

函数,如同在Python中的每个东西,是一个对象。

例 1.5. 存取 buildConnectionString 函数的文档字符串

>>> import odbchelper                              1
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> print odbchelper.buildConnectionString(params) 2
server=mpilgrim;uid=sa;database=master;pwd=secret
>>> print odbchelper.buildConnectionString.__doc__ 3
Build a connection string from a dictionary

Returns string.
1 第一行将 odbchelper 程序作为模块导入。一旦你导入一个模块,你可以引用它的任何的公共函数,类,或属性。模块可以通过这种方法来使用其它模块的功能,也可以在IDE中实现它。这是一个很重要的概念,在后面将谈得更多。
2 当你想使用定义在被导入模块中的函数时,必须包括模块的名字。所以你不能只使用 buildConnectionString,而应该为 odbchelper.buildConnectionString。如果你曾经用过Java中的类,对于这一点应该非常熟悉。
3 如你想象的替换调用函数,我们可以访问了函数的属性,__doc__。

在Python中每个东西都是对象,并且几乎每个东西都有属性和方法。[1] 所有的函数都有一个内置的属性 __doc__,它会返回在函数源代码中定义的文档字符串。

这一点如此重要,所以我会在前几讲中重复它,以防你忘记了:在Python中的每个东西都是对象。字符串是对象。列表是对象。函数是对象。甚至模块是对象,这一点我们很快会看到。


进一步阅读

脚注

[1] 不同的编程语言以不同的方式定义“对象”。某些语言,它意味着 全部 对象 必须 有属性和方法;另一些语言,它意味着所有的对象可以被子类化。在Python里,定义是松散的;一些对象既没有属性也没有方法(在本章后面有更多关于这一点的说明),而且不是所有的对象可以子类化(在第三章有更多这一点的说明)。但是每个东西都是对象可以理解为每个东西可以赋给一个变量或当作一个参数传递给一个函数(在第二章中有更多关于这一点的说明)。