在Python中引用是非常简单的事情,这里需要清楚三个概念就可以了包、模块、类。类这个就不用说了。模块对应的是一个.py文件,那么module_name就是这个文件去掉.py之后的文件名,py文件中可以直接定义一些变量、函数、类。那么包我们可以看作一个包含__init__.py和一系列.py文件的文件夹,这样做的目的是为了区别包和普通字符串。
importmodule_name
frompackage_nameimportmodule_name
frompackage_nameimport *
那么如何import时,python解释器如何才能找到该模块放置的文件位置呢?python寻找模块的优先级如下:
1、 当前文件目录
2、 环境变量PYTHONPATH
3、 sys.path(list类型)
sys.path是list类型,我们可以通过insert(), append()方法来增加模块导入的搜索路径,如:
import
sys
path =
“……” #需要增加的路径
sys.path.insert(0,
path)
在import模块时,该模块的顶层代码将会被执行一次。如果该模块被import多次,例如import A, import B.其中B模块本身也有import A,那么只在第一次被import的时候顶层代码会被执行。
这个Blog写的比较易懂:http://hi.baidu.com/peaksst/blog/item/a887f3ddb565683c5982ddaa.html
还有这个Blog写得也比较透彻:http://hi.baidu.com/klcstudy/blog/item/eef58113462cc6816438db5c.html
包括了:
1、 实例化对象:instance = CLASSNAME()
2、 在类实例化时生成初始化对象的函数__init__()
3、 继承:class子类名称(基类名称)
4、 多继承:class子类名称(基类1,基类2,…),决定子类属性/函数引用时采用的是深度优先、从左到右的方式:基类1-〉基类1的基类—>….->基类2->基类2的基类-〉…
sys.modules可以用来找到模块被导入的路径,这样如果有相同的模块名可以通过sys.modules知道当前使用的是哪个路径下的。sys.path是List类型, sys.modules是Dictionary类型。
在python有一个叫做实例属性的概念,实例属性顾名思义就是只属于实例而不属于类的属性,在运行时如果临时需要一些变量的时候我们可以定义新的实例属性:
- class ABC(object):
- foo = 'ABC'
- def show(self):
- print 'foo from imptee:', foo
- if __name__ == "__main__":
- a = imptee.ABC()
- print a.foo
- a.instanceVar = 'instance variant'
- print a.instanceVar
self:
1、在定义类的函数时,如果需要该函数让实例化的对象可以使用,则函数定义中必须存在参数self.
下列代码如果def函数时没有定义self参数,则在调用是会报错:TypeError: show1() takes no arguments (1 given)
2、在类中的函数如果要使用类中的变量一定要用self.var. 下列代码中Class ABC的函数show1使用的是foo是当前模块的foo, 如果要使用Class ABC中定义的foo,则必须要self.foo.
下列代码的输出为:
variant from module
variant from class ABC
- foo = 'variant from module'
- class ABC():
- foo = 'variant from class ABC'
- def show1(self):
- print foo
- def show2(self):
- print self.foo
-
- if __name__=="__main__":
- a = ABC()
- a.show1()
- a.show2()