1.python项目基本结构
我先根据前段时间广为流传的一份python脚本学习了一下python的基本项目结构,如下图:
和其他项目差不多,有异常处理、工具类、业务逻辑模块、配置文件、程序入口文件等。
清晰明了的项目结构是以后做项目第一要做的事。
展开各个文件夹,会看到每个文件夹下都有一个__init__.py
文件,如下图:
而且这个文件除了一些注释没有其他内容,我查资料了解了一下这个文件的作用:
__init__.py
文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py
文件
通常__init__.py
文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py
文件。这样我们可以在__init__.py
文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
2.入口文件
import sys
from maotai.jd_spider_requests import JdSeckill
if __name__ == '__main__':
a = """
功能列表:
1.恐惧
2.贪婪
"""
print(a)
jd_seckill = JdSeckill()
choice_function = input('请选择:')
if choice_function == '1':
jd_seckill.reserve()
elif choice_function == '2':
jd_seckill.seckill_by_proc_pool()
else:
print('没有此功能')
sys.exit(1)
这个里面我不太清楚的就是__name__ == '__main__'
的用法,查找资料,找到解释如下:
一个Python文件有两种使用方法, 第一是直接作为脚本执行,第二是通过在其它py文件中导入该文件调用执行。
而__name__ == '__main__'
的作用就是控制这两种情况的代码执行过程。
简言之:if __name__ == '__main__'
下的代码只有在被作为脚本执行的情况下才会执行。
看完上面的解释,我运行这个项目的时候,就可以打开我的命令终端,输入命令 python main.py
执行。
像一些工具方法,如果不是测试需要,就不用写if __name__ == '__main__'
的代码,因为工具类通常就是导入到别的py文件中使用的,如果需要测试工具类中的方法,那就可以加入这部分代码。
比如下面这个工具文件:
3.类
class SpiderSession:
"""
Session相关操作
"""
def __init__(self):
self.cookies_dir_path = "./cookies/"
self.user_agent = global_config.getRaw('config', 'DEFAULT_USER_AGENT')
self.session = self._init_session()
def _init_session(self):
session = requests.session()
session.headers = self.get_headers()
return session
def get_user_agent(self):
return self.user_agent
这是一个类文件里的部分代码,__init__(self)
方法是类的一个特殊方法,可以理解为构造函数。在类中定义的方法,第一个参数都必须是self,这也是类中的方法和普通函数的区别,对比上面的工具文件里面的方法,就不需要self参数。
完!