Python类、模块、包的解释和使用方法

一、类:class

类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。

二、模块:module

通常模块为一个文件,直接使用import来导入就好了。可以作为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。

三、包:package

通常包是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

四、import语句语法:

  1. import PackageA.SubPackageA.ModuleA,使用时必须用全路径名
  2. 变种: from PackageA.SubPackageA import ModuleA, 可以直接使用模块名而不用加上包前缀。
  3. 也可以直接导入模块中的函数或变量:from PackageA.SubPackageA.ModuleA import functionA


 五、模块和包的用法:
 模块:

#文件目录结构
module
|--main.py
|--spam.py

你可以使用import语句将一个源代码文件作为模块导入.例如:

# file : spam.py
a = 37                    # 一个变量
def foo:                  # 一个函数
    print "I'm foo"
class bar:                # 一个类
    def grok(self):
        print "I'm bar.grok"
b = bar()                 # 创建一个实例

使用import spam 语句就可以将这个文件作为模块导入:

# file : main.py
import spam               # 导入并运行模块 spam
    print spam.a          # 访问模块 spam 的属性
    spam.foo()
    c = spam.bar()

用逗号分割模块名称就可以同时导入多个模块,系统在导入模块时,做了以下三件事:

1.为源代码文件中定义的对象创建一个名字空间,通过这个名字空间可以访问到模块中定义的函数及变量;
2.在新创建的名字空间里执行源代码文件;
3.创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量。

包:

通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。

__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package import *这语句使用的,全部导出定义过的模块。

#文件目录结构
test  
|--main.py          
|--package
   |--__init.py__
   |--module_a.py
   |--module_b.py



#file :module_a.py
def set():
    print('module_a.py')


#file :module_b.py
def set():
    print('module_b.py')
    

如果包的__init__.py定义了一个名为__all__的列表变量,from package import * 语句只能导入__all__列表中存在的对象(模块列表)。

如果包的__init__.py没有定义__all__, 这条语句不会导入任何package的子模块,它只保证包package被导入,然后导入定义在包中的所有名字。

例如:

# package: __init__.py #不为空
__all__ = [ 'module_a', 'module_b' ]     # 定义使用 `*` 可以导入的模块

# file:main.py
from package import *                    #将导入module_a.py和module_b.py模块
module_a.set()
module_b.set()

===========================================================================

# package: __init__.py #为空
                                         # 只保证包导入成功,不导入任何模块
# file:main.py
#如导入module_a.py和module_b.py模块需要:
from package import module_a,module_b
module_a.set()
module_b.set()

注:import package语句仅仅导入__init__.py文件(无论是否有__all__列表),都不导入__all__内的任何模块,

#当使用import package时,仅仅导入__init__.py文件;
#若要使用import package有两种方法;
#方法1:
from package import module_a 
module_a.set()              #使用module_a内函数的方法

#方法2:
import package.module_a
package.module_a.set()      #使用module_a内函数的方法

另外:模块导入时可以使用 as 关键字来改变模块的引用对象名字:

import os as system
import socket as net, thread as threads
system.chdir("..")
net.gethostname()

文本多摘自:

https://blog.csdn.net/zyz511919766/article/details/22678143#

https://www.cnblogs.com/kex1n/p/5977051.html

你可能感兴趣的:(Python)