Python 框架化代码的学习
1 def 1: 2 pass 3 4 def 2: 5 pass 6 7 def 3: 8 pass
从Python初学我们习惯的风格就是如上图,把函数方法直接放到全局来写,这的确是最简单易懂的方式。但随着我们的深入学习,如果一个.py文件中有几十个全局函数时,我们开始头疼了,在哪里找我想要的函数,难道次次都要Ctrl+左键吗?
class MySport1: def __init__(self): pass def Pingpong(self): pass def Basketball(self,player): pass def Run_MySport1: sport = MySport1() sport.Pingpong() sport.Basketball(myself) class MySport2: def __init__(self): pass def Sport1(self): pass def Sport2(self): pass def Run_MySport2: sport = MySport2() sport.Sport1() sport.Sport2()
其实Python给了足够的自由,但是对于一个框架化的代码,是利于项目开发移植,利于不同时期不同工程师维护的,其风格应是整洁简明。我比较喜欢图2我自己写的风格,通过对象化的类进行分类,利于代码追踪和维护。这样的封装对于多个.py文件的拓展使用还是很有用的。因为类中属性是个很有用的东西。类结束后面,我喜欢跟一个全局函数,用来表示调用此类的步骤的一个例子,作为后面的参考,以免长期后对代码的遗忘。
def __init__(self): self.csvFileName = 'setting.json' self.csvFilePath = 'C:' # 默认与程序同根目录,暂不用 # 通过JSON文件,配置绘图属性,X轴点数、Y轴...,这里简单声明属性。 self.map_X = 0 self.map_Y = 0 self.map_Z = 0 self.map_Step = 1 self.my_file = {} self.my_mode_HeatMap = {} self.my_mode_ScatterPlot = {} def Set_JSON(self): """ 配置属性 编码形式UTF-8,无BOM""" # json文件报错不能编码,应当用编辑器保存json格式为无COM的utf-8 with open(self.csvFileName, 'r') as f: file_p = json.loads(f.read() ) #,encoding='utf-8' print file_p['file']['name'] # 字典应对多元素的数据整理,调用方法 self.my_file(csv_filename) self.my_file={ "csv_filename": file_p['file']['name'], "csvFilePath": file_p['file']['path'], "draw_mode": file_p['file']['draw_mode'], "is_savefig": file_p['file']['save_fig'], "fig_format": file_p['file']['fig_format'] }
外部习惯用JSON等作配置文件,以供操作员修改某些参数,又不需其修改程序时,我们需要读取JSON文件。我发现用字典更容易将这些相关的参数分类,否者如果有几百个参数需要,总不能写几百的属性吧,那写属性都比功能代码要长喽。
.json文件的内容如下 { "file": { "name": "ABC.csv", "path": "C:/AA/BB/CC/DD", "draw_mode": 0, "save_fig": "False", "fig_format": ".png" }, }
这样“file”作为一个字典名,"name"为其中一个键,"ABC.csv"为其键对应的值。这样字典就能分别提取到所有需要的参数,键名可以根据自己需要再次封装。其实,还有另一个更好的思路,那就是读取JSON文件,后自动生成相应属性并赋值,这样的好如果在外部追加JSON文件的参数,内部赋值就可以不用添加新的属性或是字典来配对。但我还没能实现,有待研究。