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__,而不是通过函数调用。
Note
Python中的 import 如同Perl中的 require。一旦 import 一个Python模块,你可以使用 module.function 来访问它的函数。一旦你 require 一个Perl模块,你可以使用 module::function 来访问它的函数。

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

这一点太重要了,所以我会在开头几次反复强调它,省得你忘记了:在Python中的每个东西都是对象。字符串是对象。列表是对象。函数是对象。甚至模块也是对象,这一点我们很快会看到。

进一步阅读

脚注

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