字符串的方法到底是在哪儿定义的?

字符串的方法到底是在哪儿定义的?

在学习的过程中有一个问题百思不得其解,关于string的。
在python中,对于string的方法的调用,可以采用string的module中的方法,也可以直接用S.method()的方式调用。比如:

[Copy to clipboard] [ - ]
CODE:
import string
string.replace('hello','e','d')

也可以用

[Copy to clipboard] [ - ]
CODE:
'hello'.replace('e','d')

实现同样的功能。
我知道像len() abs()等这些函数是在__builtin__中定义的,python解释器在启动时会自动import。那么在上面的第二种方法中的replace ()是在什么地方定义的?哪个文件?'hello'.replace('e','d')这一行代码在python中运行过程到底又是怎么回事呢? python在运行时,发现'hello'是一个内置的str对象,然后自动import一个文件,里面包含有了各种方法的定义。这种理解对不对呢?!
你所说的第二种并不是导入了什么新的模块,而是对象自身就有的方法。而string类型是python内置的,因此不用导入什么就可以直接使用。具体的文档(Python Library Reference):

2.3.6 Sequence Types -- str, unicode, list, tuple, buffer, xrange
更细的关于string对象的在这节的下面,里面列出了string对象的方法。
其实两种调用方式效果基本上可以说是一样的。只不过一个是以bound的方式调用,一个是以unbound的方式调用。