我用的是 tornado
我定义了一个 HandlerBase
from proj import consts, models, exceptions
from tornado import web
class HandlerBase(web.RequestHandler):
f_consts= consts
f_models = models
f_exceptions = exceptions
这个样子是有什么问题吗?
我的目的是因为
基本上 Handler 都需要用到这些 module,
因为不知道这么做有什么问题,我现在只在测试里面这么写了
1
hareandlion 2020-09-01 09:47:05 +08:00 1
被 import 的“models”是个单例对象,作为 HandlerBase 中的类变量,被多个`HandlerBase`同时访问时可能造成内存泄漏,如果已经做过相关处理,或者 models 是公共数据,本就允许这样使用,那没问题
|
2
fasionchan 2020-09-01 09:49:14 +08:00 1
一般没有什么问题。但是,如果这些变量是描述符(descriptor,实现了__get__ __set__ __del__ 魔术方法)的话,属性查找行为需要留意。具体可以研究下 Python 类机制以及数据描述符的特性:
https://www.imooc.com/read/76/article/1928 |
3
chenqh OP @hareandlion models 就是一个 module
下面的文件是这样的结构 ``` model_user.py model_user_token.py model_log.py __init__.py ``` |
4
Hieast 2020-09-02 23:40:43 +08:00
首先虽然你描述用的是 module,但是 3l 的例子说明其实你 import 的是 package 包,这里概念有问题。
另外就算技术上没有问题,但是业务上为什么要这么做? 假如业务会增长,你的 consts, models, exceptions 肯定要根据业务领域再次分成不同的包,但是 HandlerBase 应该是整个项目通用的,这里有矛盾。 假如业务不会增长,本来也没有几个 handler,直接导入也不复杂吧? |
6
xchaoinfo 2020-09-04 16:11:18 +08:00
为了导入方便的话, 在 __init__ 重新定义 __all__ , 然后 from xxx import *
|