对如何写一个工业级的Python项目作一个top-down小结。

一、项目结构

顶层结构:

文件夹:

  • model可以是项目中的自定义类;
  • utils是一些工程工具,比如log,tracker
  • log存放记录的日志

py文件:

  • run:主文件,项目的顶层逻辑;
  • settings:run文件中的常量(用作设置);

二、package(包)

__init__.py作用:

  • 当文件夹下有__init__.py时,表示当前文件夹是一个package,其下的多个module统一构成一个整体。
  • 模糊导入:

    from Root.Pack1 import *

    模糊导入中的*中的模块是由__all__来定义的,__init__.py的另外一个作用就是定义package中的__all__,用来模糊导入,如__init__.py:

    __all__ = ["Pack1Class","Pack1Class1"]

或者

__all__ = ['file1','file2']   #package1下有file1.py,file2.py

借助__init__.py可以:将子文件中的类名导入到包名下

例如websocket包:websocket.WebSocketApp,外部在import的时候可以看到所有写在__init__.py文件中的类名

websocket包__init__.py文件内容:

websocket包_app.py中

三、类

如何写callback(回调函数):

  • 1.在声明处,将用于挂接外部函数的形参写成带默认参数的形式,比如on_message=None:
    def __init__(self, url, header=None,
on_open=None, on_message=None, on_error=None,
on_close=None, on_ping=None, on_pong=None,
on_cont_message=None,
keep_running=True, get_mask_key=None, cookie=None,
subprotocols=None,
on_data=None):
"""
url: websocket url.
header: custom header for websocket handshake.
on_open: callable object which is called at opening websocket.
this function has one argument. The argument is this class object.
on_message: callable object which is called when received data.
on_message has 2 arguments.
...
"""
  • 2. 类中需定义调用函数,检测外部函数能否正常使用:
    def _callback(self, callback, *args):
if callback:
try:
callback(self, *args)
except Exception as e:
_logging.error("error from callback {}: {}".format(callback, e))
if _logging.isEnabledForDebug():
_, _, tb = sys.exc_info()
traceback.print_tb(tb)
  • 3. 调用时,通过定义的_callback来调用外部函数API
self._callback(self.on_message, data)  

 

给self绑定一个新属性:

Python由于是动态语言,可以自由地绑定新属性。但在类的方法中需要用hasattr检查是否已存在,防止多次绑定。 

            if not hasattr(self, 'flop_strategy'):
self.flop_strategy = FlopStrategy()

  

  

Python工程化小结的更多相关文章

  1. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  2. Python字典小结

      字典(dict)结构是Python中常用的数据结构,笔者结合自己的实际使用经验,对字典方面的相关知识做个小结,希望能对读者一些启发~ 创建字典   常见的字典创建方法就是先建立一个空字典,然后逐一 ...

  3. 第11.27节 Python正则小结:正则静,静则明,明则虚,虚则无为而无不为也

    正则表达式的章节到此就结束了,老猿现在觉得对我们这些身具程序猿基因特色的人来说,正则表达式应该是蛮可口的开胃小菜. 在写标题时,本来想写"正则表达式小结",后来想了想,百度了一下, ...

  4. python学习小结8:I/O

    文件I/O是Python中最重要的技术之一,在Python中对文件进行I/O操作是非常简单的. 打印到屏幕上 >>> print "python is really a g ...

  5. python学习小结7:变量类型

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...

  6. python学习小结6:模块

    模块:在Python中有一个概念叫做模块(module),简单地说,模块就是一个保存了Python代码的文件.          模块能定义函数,类和变量,模块里也能包含可执行的代码.         ...

  7. python学习小结5:封装、继承、多态

    面向对象程序设计中的类有三大特性: 继承,封装,多态 继承:以普通的类为基础建立专门的类对象 封装:对外部世界隐藏对象的工作细节 多态:可对不同类的对象使用同样的操作 在Python中类的继承定义基本 ...

  8. python学习小结4:类

    虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程. 类和对象是面向对象编程的两个主要方面.类:创建一个新类型,而对象是这个类的实例,类使用class关键字创建.类的域和方法被列在一个 ...

  9. python学习小结3:函数

    Python是对接口编程,而不是对数据类型编程.例如我们定义了一个函数,在函数里用到了in这个接口,那么只要传入的参数实现了这个接口就可以,我们不在乎它是list还是tuple. 简单的函数 使用de ...

随机推荐

  1. SecureCRT突然卡死的问题

    SecureCRT作为著名的SSHclient,经经常使用于登陆远程server. 在上面编辑文本,特别是用vi打开两个文本,而且须要切换时.非常easy出现卡死的现象,不能接受不论什么的键盘输入. ...

  2. 深入详解美团点评CAT跨语言服务监控(二) CAT服务端初始化

    Cat模块 Cat-client : cat客户端,编译后生成 cat-client-2.0.0.jar ,用户可以通过它来向cat-home上报统一格式的日志信息,可以集成到 mybatis.spr ...

  3. KNN算法原理(python代码实现)

    kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...

  4. 说明os,sys模块不同?并列举常用的模块方法

    官方解释: os: This module provides a portable way of usingoperating system dependent functionality. 翻译:提 ...

  5. struts2+dojo实现datagrid动态刷新

    实现一个普通的数据库查询功能,参考了这个帖子:http://stackoverflow.com/questions/5499453/how-to-refresh-datagrid 需要注意的是动态创建 ...

  6. 总线读写---verilog代码

    总线读写---verilog代码 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

  7. SDI初识

    SDI初识 SDI接口,即“数字分量串行接口(Serial Digital Interface)”.按照速率可以分为: 标准清晰度SD-SDI,速率为270Mb/s; 高清标准HD-SDI,速率为1. ...

  8. python 多线程 并发socket实例

    sever side: import socketserver class MyTCPHandler(socketserver.BaseRequestHandler): def handle(self ...

  9. web前端性能调优(一)

    最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...

  10. 跟着未名学 - 录屏套件 Camtasia Studio

    目录 Camtasia Recorder. 1 Camtasia Studio.. 2 时间线... 2 渲染... 5 Camtasia MenuMaker. 6 Camtasia Play. 6 ...