博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
也说说Python中__init__.py的作用
阅读量:3724 次
发布时间:2019-05-22

本文共 2634 字,大约阅读时间需要 8 分钟。

以一个猫狗识别的程序为例,说说__init__.py的作用。

在windows的cmd命令行中,使用下面指令把所在路径下面的所有文件以树的形式列出。

tree /F > D:\tree.txt

 我手头上的一个使用knn进行猫狗分类的项目,包含有以下的文件。

│  knn.py├─pet_sample│  ├─cat1│  │      │  └─dog1│          └─pyimagesearch    │  __init__.py    │  __init__.pyc    │      ├─datasets    │      simpledatasetloader.py    │      simpledatasetloader.pyc    │      __init__.py    │      __init__.pyc    │          └─preprocessing            simplepreprocessor.py            simplepreprocessor.pyc            __init__.py            __init__.pyc

主要的文件有三个knn.py,simplepreprocessor.py和simpledatasetloader.py。knn.py是主文件。使用python knn.py时候会调用后面两个文件。*.pyc都是编译时候自动生成的。

simplepreprocessor.py文件内容如下:

import cv2 class SimplePreprocessor:	def __init__(self, width, height, inter=cv2.INTER_AREA):		self.width = width		self.height = height		self.inter = inter	def preprocess(self, image):		return cv2.resize(image, (self.width, self.height), interpolation=self.inter) if __name__ == '__main__': 	s = SimplePreprocessor(32, 32)	img = cv2.imread('/home/xxjian/DeepLearningMaterial/kagglecatsanddogs_3367a/PetImages/Cat/9759.jpg')	cv2.imshow('src', img)	cv2.imshow("resize", s.preprocess(img))	cv2.waitKey(0)

其中下面代码的作用就是当使用python simplepreprocessor.py调用本文件时,就会执行这段代码。若只以引用的方式调用本文件,则不执行保本语句包含的代码段。

if __name__ == '__main__':

另外本文件具有一个类SimplePreprocessor。为了使别的文件可以调用SimplePreprocessor这个类,需要在simplepreprocessor.py的所在文件夹中新建一个__init__.py

文件内容如下:

__all__ = ['SimplePreprocessor']from simplepreprocessor import *

这样即可把包含了simplepreprocessor.py、__init__.py的文件夹preprocessor当作是一个库。

同样的在simpledatasetloader.py中有两个类,SimplePreprocessor和SimpleDatasetLoader。

import numpy as npimport cv2import osclass SimplePreprocessor:	# 略class SimpleDatasetLoader:		# 略 if __name__ == '__main__':		# 略

和simpledatasetloader.py处于同一个文件夹的__init__.py中的内容如下:

__all__ = ['SimplePreprocessor', 'SimpleDatasetLoader']from simpledatasetloader import *

这样就知道datasets文件夹内包含有以下的Class(类)。

 

knn.py是本工程的主文件。使用python knn.py可以执行本程序。

from sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_reportfrom pyimagesearch.preprocessing import SimplePreprocessorfrom pyimagesearch.datasets import SimpleDatasetLoaderfrom imutils import pathsimport argparse if __name__ == '__main__':    # 以下代码略

 

代码中的pyimagesearch、preprocessing、datasets都是文件夹,要用from关键字。

而import导入的是类,上面调用的SimplePreprocessor和SimpleDatasetLoader都是类。

之后在pyimagesearch中的__init__.py的内容是:

from datasets import __all__from preprocessing import __all__

这样,knn.py就可以找得到所需要的类了。

以上就是本工程的介绍。总的来说,__init__.py作用是形成了类的索引。没看过书,不知有没有错,这就是我的理解了。

 

参考资料1:

转载地址:http://uwtnn.baihongyu.com/

你可能感兴趣的文章
Java—求素数
查看>>
python背单词小程序
查看>>
Java—10000000以内完美数
查看>>
软考网工—华为命令总结
查看>>
圆的内接正n边形的周长
查看>>
洛古P1518—两只塔姆沃斯牛
查看>>
Frame
查看>>
Frame-Pannel-Button综合
查看>>
选课小程序
查看>>
anaconda安装步骤
查看>>
画笔Paint及模拟画图工具
查看>>
Collection接口
查看>>
JDBC连接数据库
查看>>
无聊时候的故事分享
查看>>
LVM(逻辑卷管理器)
查看>>
Java实现超市管理系统(含数据库)
查看>>
LeetCode-1:两数之和
查看>>
开发Hello World 程序
查看>>
Linux静态库与动态库的使用
查看>>
基于JavaGUI的管理系统(含数据库)
查看>>