从开始学习python到现在,至少到昨天遇到那个问题为止,只知道__init__.py文件是用来做一些初始化的工作的,但是具体可以做哪些东西却一无所知。先看看下面的代码吧。
程序包结构
- 项目最外层包: /home/admin/
- 对应项目包(/home/admin/)下有如下文件和目录:
- ./dbadmin/
- ./webadmin/
- __init__.py
- setting.py
- urls.py
- manage.py
- 对应/home/admin/dbadmin/下有如下文件和目录:
- ./engin/
- ./test/
- __init__.py
- views.py
- model.py
代码示例:
- from admin import dbadmin
- print "How to use __init__"
- # dbadmin.demo()具体实现不管,只要知道他它是一个方法
- rst = dbadmin.demo()
- print "Where is the method demo()"
看着这回答一个问题:
dbadmin明明是一个目录,它是如何通过dbadmin.demo()方法来调用demo()方法的呢?
如果你知道答案了,您可以不用往下看了,我要说的就是那个!
如果不知道,继续……
其实结合包结构和代码,大家可以能会发现找不到demo()的位置(Note:不知道上个问题的答案的情况下),最开始的时候也提到过,__init__.py是用来做一些初始化的操作的,上述代码中 dbadmin.demo() 调用的方法demo()其实是在__init__.py中,也就是说,通过把方法定义在__init__.py中,我们就可以直接通过包来调用__init__.py中的方法。相信大家也知道这样的调用方式: 包名.文件名.方法名。
其实我也是在看别人代码的时候发现这个问题的,据相关高手介绍,是否在__init__.py中定义方法具体还是要看个人习惯的,一般情况下他们是会让__init__.py空着的。这应该也算是__init__.py的初始化的一部分功能吧。