转载:http://www.cnblogs.com/phinecos/archive/2010/05/07/1730027.htm当
执行import module时,解释器会根据下面的搜索路径,搜索module1.py文件。
1) 当前工作目录
2) PYTHONPATH中的目录
3) Python安装目录 (/usr/local/lib/python)
事实上,模块搜索是在保存在sys.path这个全局变量中的目录列表中进行搜索。
sys.path会在解释器开始执行时被初始化成包含:
1)当前工作目录
2) PYTHONPATH中的目录
3) Python安装目录 (/usr/local/lib/python)
package是模块的集合,每一个Package的根目录下面都应当有一个__init__.py 文件。当解释器发现目录下有这个文件时,他就会认为这是一个Package,而不是一个普通的目录。
我们通过下面这样的一个实例来说明
假定项目结构如下:
demo.py
MyPackage
---classOne.py
---classTwo.py
---__init__.py
MyPackage
---classOne.py
---classTwo.py
---__init__.py
现在我们通过两种方式来实现包机制,主要区别就在于是否在__init__.py中写入模块导入语句。
1,__init__.py是一个空白文件的方式,
demo.py内容如下:
from MyPackage.classOne import classOne
from MyPackage.classTwo import classTwo
if __name__ == "__main__":
c1 = classOne()
c1.printInfo()
c2 = classTwo()
c2.printInfo()
from MyPackage.classTwo import classTwo
if __name__ == "__main__":
c1 = classOne()
c1.printInfo()
c2 = classTwo()
c2.printInfo()
classOne.py内容如下:
class classOne:
def __init__(self):
self.name = "class one"
def printInfo(self):
print("i am class One!")
def __init__(self):
self.name = "class one"
def printInfo(self):
print("i am class One!")
classTwo.py内容如下:
class classTwo:
def __init__(self):
self.name = "class two"
def printInfo(self):
print("i am class two!")
def __init__(self):
self.name = "class two"
def printInfo(self):
print("i am class two!")
2,如果在__init__.py中写入导入模块的语句,则上述例子可以这样来做。
其中__init__.py中内容如下:
from classOne import classOne
from classTwo import classTwo
from classTwo import classTwo
demo.py内容如下:
import MyPackage
if __name__ == "__main__":
c1 = MyPackage.classOne()
c1.printInfo()
c2 = MyPackage.classTwo()
c2.printInfo()
if __name__ == "__main__":
c1 = MyPackage.classOne()
c1.printInfo()
c2 = MyPackage.classTwo()
c2.printInfo()
或者demo.py也可以定义如下:
from MyPackage import *
if __name__ == "__main__":
c1 = classOne()
c1.printInfo()
c2 = classTwo()
c2.printInfo()
if __name__ == "__main__":
c1 = classOne()
c1.printInfo()
c2 = classTwo()
c2.printInfo()
相关推荐
在 Jython 中,内置类型被描述在一起,以便于查找和引用。例如,整数(int)、浮点数(float)、字符串(str)等都是 Python 的内置类型。对于这些内置类型的了解,是进行 Python 或 Jython 编程的基础。 在编程中...
通过Jython,Java可以像调用Java类一样调用Python模块。不过,Jython并不支持所有Python库,尤其是C扩展的库。 2. **JPyCall**: JPyCall是一个Java库,它提供了与Python互操作的能力,允许Java程序直接调用Python...
21.7.1 在Jython中使用 Java类 466 21.7.2 从Jython访问数据库 471 21.7.3 通过Jython编写 Java EE servlet 477 21.7.4 选择Jython开发工具 483 21.8 使用Jython进行测试 483 21.9 嵌入Jython解释器 484 21.10 处理C...
4. **模块与包**: - 导入模块:import语句,了解内置模块和第三方模块的使用。 - 自定义模块:创建.py文件,组织代码结构。 - 包管理:了解pip工具,用于安装、升级和管理Python包。 5. **面向对象编程**: - ...
Python还可以与其他语言集成,例如与C/C++的集成,以及跨平台的Python实现Jython和IronPython。 Python提供了丰富的内置数据类型,比如数字、字符串、列表、字典、元组等。Python的基本语句包括变量赋值、函数调用...
模块是Python中组织代码的基本单位,可以包含函数、类、变量等,通过导入模块可以访问其内部的资源。 #### 7.2 模块加载 Python在首次导入模块时会执行其代码,并缓存模块对象,后续导入将直接使用缓存的对象,...
- 模块与包:了解如何导入和使用模块,以及创建和组织自定义包。 2. **Python进阶** - 类与对象:深入理解面向对象编程,包括类的定义、继承、多态和封装。 - 异常处理:学习try-except、finally和else子句,...
4.23 确保名字已经在给定模块中被定义 178 第5章 搜索和排序 180 引言 180 5.1 对字典排序 185 5.2 不区分大小写对字符串列表排序 185 5.3 根据对象的属性将对象列表排序 187 5.4 根据对应值将键或索引排序 ...
2.19.2 如何访问一个模块函数或访问一个模块变量 2.20 实用的函数 2.21 练习 第3章 Python基础 3.1 语句和语法 3.1.1 注释(#) 3.1.2 继续(\) 3.1.3 多个语句构成代码组...
在Python开发中,PyPI(Python Package Index)是官方的第三方Python软件包仓库,它为开发者提供了一个平台来发布他们的模块、库和其他工具,方便其他用户下载和安装。PyPI上的资源通常通过pip(Python的包管理器)...
例如,通过Jython(一个Python的Java实现)可以在Java环境中运行Python代码,或者使用Java的`Jython`库调用Python模块。另外,Java应用可以通过`JDBC`连接Python的数据库驱动,实现数据交互。在自然语言处理领域,...
`.whl`文件包含了Python模块的编译代码,以及所有必要的依赖项,使得用户可以直接通过pip(Python的包管理工具)进行安装,而无需构建源码。 标签“Python库”表明`datelibrary_javis`是一个专门设计用于Python编程...
Python库是一系列预先编写好的函数或模块集合,它们可以被其他Python程序引用和使用,以增强程序的功能或简化编程任务。"bugrest"这个库可能是为了特定目的,如处理错误报告、调试或者与RESTful API交互等而设计的。...
- 包管理:创建和导入自定义的模块和包,提高代码组织性。 5. **面向对象编程**: - 类(class):定义对象的蓝图,包含属性和方法。 - 对象实例化:基于类创建对象,可以继承和多态。 - 构造函数(__init__)...
"none"意味着这个包不包含特定于实现的代码,也就是说,它不依赖于Python的特定实现,如CPython、Jython或PyPy。这样的设计使得该库具有更好的跨平台兼容性。 Wheel格式的优点在于它预编译了Python字节码,可以避免...
12. **增强的`__init__.py`**:在Python 3.7中,如果子包的`__init__.py`为空,Python将不再生成一个空的文件,而是自动识别该目录为一个包。 13. **`sys.implementation`**:此属性提供了关于Python实现的详细信息...