Python的类, 模块与包概念
可以这么理解:
1. 类就是类了.
2. 模块就是py文件, 模块名就是py文件名去掉后缀.py
3. 包就是文件夹, 包名就是文件夹名.
4. 类放在模块中(类在py文件中定义); 模块放在包中(py文件放在文件夹中); 包中也可以有包(文件夹可以有子文件夹)
1. 类
类就是类了.
定义一个类
class MyClass(OtherClass):
myClassIndex = 1
def __init__(self, a, b, c, classIndex):
# 调用父类的构造函数
OtherClass.__init__(self, a, b, c)
self.myClassIndex = classIndex
# 重写父类的方法
def DoSomething(self):
print("MyClass Index is %d" %(self.myClassIndex))
2. 模块
模块可以理解为对应于一个py文件. py文件中定义一些函数, 变量, 类等.
例如: 文件
# MyModule1.py
def MyDoSomething(a)
print(a)
class MyClass1:
myClassIndex = 1
def __init__(self, classIndex):
self.myClassIndex = classIndex
def DoSomething(self):
print("MyClass Index is %d" %(self.myClassIndex))
导入这模块,就可重用这些函数和变量。
导入例子:
# Caller.py
import MyModule1
print(__name__) # 打印本模块的名字
print(MyModule1.__name__) # 打印MyModule1模块的名字
MyModule1.MyDoSomething('Hi') # 调用MyModule1的MyDoSomething方法
注:
模块作为主程序调用时, __name__的值是__main__, 否则值就是模块名了
3. 模块的路径搜索
当MyModule1被导入后,python解释器就在当前目录下寻找MyModule1.py的文件, 如果没有, 则再从环境变量PYTHONPATH寻找, 如果这环境变量没有设定, 解释器还会在安装预先设定的的一些目录寻找。
更强大的是, 这个搜索路径列表可以动态的添加.非常简单,就是使用list的append()或insert()增加新的目录.
#module2.py
import sys
import os
print(sys.path)
workpath = os.path.dirname(os.path.abspath(sys.argv[0]))
sys.path.insert(0, os.path.join(workpath, 'modules'))
print(sys.path)
4. 包
包可以理解为文件夹, 你可以按照不同的功能, 把模块放到不同的包里面去(就是把py文件按功能放到不同的文件夹里面去).
但是要特别注意的是, 当文件夹当作包使用时, 文件夹需要包含__init__.py文件, 主要是为了避免将文件夹名当作普通的字符串. __init__.py的内容可以为空, 一般用来进行包的某些初始化工作或者设置__all__值, __all__是在from package-name import *这语句使用的,全部导出定义过的模块.