0%

类,模块,包,库区别?

一、模块,包,库

模块,英文为Modules,本质上是一个Python程序,以.py作为文件后缀。任何py文件都可以作为一个模块。[1]

大型项目需要多个模块,用包(package) 来管理模块。Python包,就是里面装了一个.py文件的文件夹。

Python包具有下面3个性质: 1.它实质上是一个文件夹; 2.该文件夹里面一定有_init_.py模块,其他的模块可以有也可以没有; 3.它的本质依然是模块,因此一个包里面还可以装其他的包;

严格来说Python中是没有库(library) 的,模块(module)和包(package)都是Python语法中有的概念,而库只是一个通俗的说法。平时说的库既可以是一个模块也可以是一个包。证据就是我们可以打开Python的安装目录,里面有一个叫做Lib的文件夹,打开这个文件夹之后就会发现很多“标准库”都在里面,我们常用的os库、random库、re库都在里面,这些“库”都是一个个的python文件即模块;而json、collections、sqlite3还有tkinter这些“库”又是一个一个的文件夹(里面都有__init__.py)也就是包

二、从类到包

1
2
3
4
5
6
class People:
def __init__(self,n): # 定义了一个方法__init__
self.name = n
def speak(self): # 定义了一个方法speak
print("hello")

描述一个真实的对象一般有两种方式,他可以做什么(行为),他是什么样的(属性或特征) Python中一个对象的特征也称为属性(attribute)。它所具有的行为也称为方法(method)。类是一个模板,具有相同的属性和行为。

1
2
3
4
5
6
# 简单理解,不是很严谨
我是XXX # 这是一个类

我是周杰伦 # 这是创建了一个实例(对象)周杰伦
我是昆凌 # 这是创建了另一个实例(对象)昆凌
# 两个对象具有相同的一般行为和特征

我是周杰伦,self.name= JayChou 我和self是一样的,它是一个指向实例本身的引用,所以方法的定义必须包含形参self。self为前缀的变量可供类中所有方法使用。

首字母大写的是类,类中的函数称为方法 函数和方法本质是一样的,差别在于调用方法 _init_是特殊的方法,用类创建实例时,都会自动运行它

1
2
3
4
5
6
7
8
9
10
11
12
13
class Restaurant:
    def __init__(self,name,type):
        self.restaurant_name = name
        self.cuisine_type = type
    def describe_restaurant(self):
        print(f"{self.restaurant_name}")
        print(f"{self.cuisine_type}")
    def open_restaurant(self):
        print("the restaurant is opening")

restaurant = Restaurant("尚丹佳","饭店") # 创建了一个restaurant的实例
restaurant.describe_restaurant()
restaurant.open_restaurant()

一个模块(一个.py文件)中存储多个类 一个文件夹有一个mycar.py文件(一个模块),该py文件中包含Car类和Battery类

导入模块中的一部分类: from 模块 import 类 form mycar import Car,Battery

导入整个模块: import 模块

包(库)包含多个模块。

下载了一个gapminder包(库):包里有如下内容:

导入包后,要使用包的类或函数,都是直接包名.函数或者包名.类 也可以用 import 包 as 别名 去简化包名,方便一些。

比如这个包有3个模块(3个py文件)

init模块(该模块定义了一个属性):

1
2
3
from .data import _load_gapminder
from .version import __version__
gapminder = _load_gapminder()

data模块(该模块定义了一个函数):

1
2
3
4
5
6
7
8
import pkg_resources
from io import StringIO
import pandas as pd


def _load_gapminder():
    content = pkg_resources.resource_string('gapminder', 'gapminder.csv').decode()
    return pd.read_csv(StringIO(content))

version模块(该模块定义了一个属性):

1
__version__ = 0.1

包的使用: 导入包后,包内的属性和函数就可以使用了


  1. 1.python中的模块、库、包有什么区别? - 风影忍着的回答 - 知乎 https://www.zhihu.com/question/30082392/answer/2030353759 ↩︎
+