Python的类, 模块与包概念

转自:Python的类, 模块与包概念


Python的类模块与包概念
http://www.cnblogs.com/allenblogs/archive/2011/05/24/2055149.html
可以这么理解
1. 类就是类了.
2. 模块就是py文件模块名就是py文件名去掉后缀.py
3. 包就是文件夹包名就是文件夹名.
4. 类放在模块中(类在py文件中定义); 模块放在包中(py文件放在文件夹中); 包中也可以有包(文件夹可以有子文件夹)

1. 

类就是类了.
定义一个类

  1. class MyClass(OtherClass):    
  2.     myClassIndex = 1  
  3.     def __init__(self, a, b, c, classIndex):    
  4.         # 调用父类的构造函数    
  5.         OtherClass.__init__(self, a, b, c)    
  6.         self.myClassIndex = classIndex    
  7.     # 重写父类的方法    
  8.     def DoSomething(self):    
  9.         print("MyClass Index is %d" %(self.myClassIndex))    

2. 模块

模块可以理解为对应于一个py文件. py文件中定义一些函数变量类等.
例如文件

  1. # MyModule1.py  
  2. def MyDoSomething(a)  
  3. print(a)  
  4. class MyClass1:    
  5.     myClassIndex = 1  
  6.     def __init__(self, classIndex):    
  7.         self.myClassIndex = classIndex    
  8. def DoSomething(self):    
  9.         print("MyClass Index is %d" %(self.myClassIndex))    
导入这模块,就可重用这些函数和变量。
导入例子:

  1. # Caller.py  
  2. import MyModule1  
  3. print(__name__)  <span style="white-space:pre;">        </span># 打印本模块的名字  
  4. print(MyModule1.__name__)   # 打印MyModule1模块的名字  
  5. MyModule1.MyDoSomething('Hi')   # 调用MyModule1的MyDoSomething方法  
注:
模块作为主程序调用时, __name__的值是__main__, 否则值就是模块名了

3. 模块的路径搜索

MyModule1被导入后,python解释器就在当前目录下寻找MyModule1.py的文件如果没有则再从环境变量PYTHONPATH寻找如果这环境变量没有设定解释器还会在安装预先设定的的一些目录寻找。
更强大的是这个搜索路径列表可以动态的添加.非常简单,就是使用listappend()insert()增加新的目录.

  1. #module2.py  
  2. import sys  
  3. import os  
  4. print(sys.path)  
  5. workpath = os.path.dirname(os.path.abspath(sys.argv[0]))  
  6. sys.path.insert(0, os.path.join(workpath, 'modules'))  
  7. print(sys.path)  

4. 

包可以理解为文件夹你可以按照不同的功能把模块放到不同的包里面去(就是把py文件按功能放到不同的文件夹里面去).
但是要特别注意的是当文件夹当作包使用时文件夹需要包含__init__.py文件主要是为了避免将文件夹名当作普通的字符串. __init__.py的内容可以为空一般用来进行包的某些初始化工作或者设置__all__, __all__是在from package-name import *这语句使用的,全部导出定义过的模块.
包怎么使用?
http://blog.csdn.net/cay22/article/details/8638867