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文件的参数,内部赋值就可以不用添加新的属性或是字典来配对。但我还没能实现,有待研究。

posted @ 2019-03-27 16:43  Lorzen  阅读(317)  评论(0编辑  收藏  举报