python import 详解

来源:互联网 发布:农村创业软件 编辑:程序博客网 时间:2024/05/18 06:20

一、名词

模块:
模块通常是个文件,可以作为module的文件类型有”.py”、”.pyo”、”.pyc”、”.pyd”、”.so”、”.dll”。
包:
包通常是个文件夹,python中约定文件夹中有__init__.py的默认为包,如果包的子目录中也有__init__.py则认为是子包。

二、import

直接引入变量使用:

*uiQt.py:*# encoding: UTF-8# 获取操作系统信息模块import platformfrom qtpy import QtWidgets, QtGui, QtCore# 创建Qt应用对象qApp = QtWidgets.QApplication([])
*main.py:*//从模块uiQt中引入变量qAppfrom vnpy.trader.uiQt(模块文件名) import qApp(变量名)sys.exit(qApp.exec_())

从模块中引入类:

*eventEngine.py:*# encoding: UTF-8class EventEngine(object):
*main.py:*# 事件引擎模块from vnpy.event.eventEngine(模块文件名) import EventEngine(类名)# 创建事件引擎    ee = EventEngine()

引入包:
注意包的引入,Python会运行从父包到子包中的__init__.py文件。下图为包目录结构:
这里写图片描述

*ctpGateway.py:*class CtpGateway(VtGateway):    def __init__(self, eventEngine, gatewayName='CTP'):        """Constructor"""        super(CtpGateway, self).__init__(eventEngine, gatewayName)
*__init__.py:*# encoding: UTF-8from vnpy.trader import vtConstantfrom ctpGateway(模块名) import CtpGateway(类名)gatewayClass = CtpGatewaygatewayName = 'CTP'gatewayDisplayName = 'CTP'gatewayType = vtConstant.GATEWAYTYPE_FUTURESgatewayQryEnabled = True
*main.py:*# 加载底层接口from vnpy.trader.gateway(子包名) import ctpGateway(子包名)# 添加交易接口    me.addGateway(ctpGateway) //包名可作为参数传递
    def addGateway(self, gatewayModule):        """添加底层接口"""        gatewayName = gatewayModule.gatewayName        # 创建接口实例        self.gatewayDict[gatewayName] = gatewayModule.gatewayClass(self.eventEngine,                                                    gatewayName)

三、注意

如果仅是使用import的话,系统为该模块创建一个命名空间后运行代码,并创建一个该命名空间的引用对象,而如果使用from import则会直接引入当前空间。如下

# file : spam.pya = 37                    # 一个变量def foo:                  # 一个函数    print "I'm foo"class bar:                # 一个类    def grok(self):        print "I'm bar.grok"b = bar()                 # 创建一个实例
 import spam           # 导入并运行模块 spam,命名空间的引用对象spam print spam.a          # 访问模块 spam 的属性 spam.foo() c = spam.bar()
import datetimeprint(datetime.datetime.now())引入整个datetime包from datetime import datetimeprint(datetime.now())只引入datetime包里的datetime类

对于from package import *语句,python引入的是 __init__.py__all__ = ["Module1", "Module2"]中的模块。