python进阶实战:如何使用自定义模块(包)?

liftword1周前 (04-30)技术文章3

有时,我们希望在py文件中导入其他py文件中的函数或类等功能,这样就可以将自己编写的代码进行重复使用,并且可以规范化积累自己的代码,成为自己代码学习的重要成果。当然,可以将这些模块化的代码共享出来,供大家一起学习和使用,也是一件非常有成就的事。

下面就来具体地、细致地、实操性的讲讲如何来建立和使用自定义的模块包。

一、建立自定义py文件

例如,我们使用python的IDLE代码编辑器(文件模式下),写了一个简化的类ReadCSV,这个类的功能就是实现可以读取不同编码的CSV文件:

将以上代码保存为read.py文件,然后在Python的安装路径的Lib/site-packages/下面新建一个文件夹myread,即Lib/site-packages/myread/,文件夹myread就是python的模块或者包。

C:\Users\fqbfqb\AppData\Local\Programs\Python\Python310\Lib\site-packages\myread

之后,将文件read.py拷贝到文件夹myread里面,再在文件夹myread里面新建一个名称为‘__init__.py’文件,该文件的内容可以为空。文件夹myread的内容如下所示:

二、使用文件read.py里面的功能

那么,我们如何使用自定义模块myead里面的功能呢?

首先,我们重启下python的IDLE,在命令行模式下,使用from myread.read import ReadCSV,即下图所示,也就是从myread文件夹的read.py文件导入ReadCSV类:

from myread.read import ReadCSV
r = ReadCSV('d:/fqb/1.csv')
r.encodings
['utf-8', 'ansi', 'gbk']

当然,也可以直接导入文件夹myread,即import myread,然后这样使用类:

import myread
r = myread.read.ReadCSV('d:/fqb/1.csv')
r.encodings
['utf-8', 'ansi', 'gbk']


三、修改类的属性

比如,我们要增加类ReadCSV的属性encodings的元素:

from myread.read import ReadCSV
r = ReadCSV('d:/fqb/1.csv')
r.get_encodings()
['utf-8', 'ansi', 'gbk']
r.mend_encodings('utf-8-sig')
r.get_encodings()
['utf-8', 'ansi', 'gbk', 'utf-8-sig']

r2 = ReadCSV('d:/fqb/2.csv')
r2.get_encodings()
['utf-8', 'ansi', 'gbk', 'utf-8-sig']

我们看到,类ReadCSV有2个实例对象r和r2,实例r修改了类的属性,那么实例r2的属性也同步修改了,也就是类的属性在多个实例之间是共享的,不是相互独立的。

但是,当我们关闭IDLE,再次导入ReadCSV类的时候,类的属性encodings的值还是以前的值,即['utf-8', 'ansi', 'gbk'],而不是新增后的值。这说明,类的属性的值的修改,只在当前的运行时是有效的,无法持久化保存下来。要想持久化修改,必须更新模块myread或者更新模块myread里面的read.py文件。

相关文章

必知必会!Python json模块全解析(python jsonpath-rw)

深入掌握Python json模块:从基础到实战的全面指南在当今数据驱动的时代,高效的数据处理与交换至关重要。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格...

9-Python自定义函数(python自定义一个函数)

1-概念在Python中,自定义函数是指由用户根据自身需求定义的函数。通过定义自己的函数,可以将代码组织成可重用的模块,提高代码的可读性和维护性。此外,函数还可以接受参数并返回结果,使得程序逻辑更加清...

python进阶突破内置模块——数据序列化与格式

数据序列化是将数据结构或对象转换为可存储/传输格式的过程,反序列化则是逆向操作。Python 提供了多种工具来处理不同场景下的序列化需求。一、核心内置模块1.json模块最常用的轻量级数据交换格式,适...

Python其实很简单 第十四章 模块(python入门之模块第二关)

模块是一组程序代码,可以是别人已经写好的,也可以是自己编写的,但都是已经存在的,在编程时直接使用就可以了。模块机制的最大好处就是程序员不再编写重复的代码,而直接利用已有的成果,这样就能将更多的精力投入...

Python import自定义模块报错、自定义异常、字符串处理、截取

一、python import自定义的模块报错问题现象:pycharm中运行一切正常,但是到命令行中(cmd命令行或pycharm的Terminal窗口)运行py文件,就会报错No module na...