Configurable十分重要! 位于tornado.util文件中,它是一个工厂类。

我们暂且称这个类为 配置类 。

我们暂且约定:该类的子类称之为 直属配置子类 , 该类的孙类、重孙类……称之为 从属配置子类。就像这样:

class Configurable(object):  # 配置类
pass class IOLoop(Configurable): # 直属配置子类
pass class PollIOLoop(IOLoop): # 从属配置子类
pass

这个配置类类似于java中的接口,他要求 直属配置子类必须有三个方法,分别是:

`configurable_base`  `configurable_default` 'initialize'

另外,在Configurable中定义了 __new__方法:

class Configurable(object):  # 配置类
'''
要求其直属配置子类必须有以下三个方法:
`configurable_base` 一般返回该直属配置子类自身
`configurable_default` 返回该直属配置子类的执行类对象
'initialize' 该直属配置子类的初始化方法
'''
def __new__(cls, *args, **kwargs)
'''
解析出impl对象
1 cls是直属配置子类时,impl就是该直属配置子类的'执行类对象'
2 cls是从属配置子类时,impl就是该从属配置子类自身
然后实例化一个impl实例对象
运行其initialize方法,并传入合并后的参数
返回该impl实例对象
'''
base = cls.configurable_base()
init_kwargs = {}
if cls is base:
impl = cls.configured_class()
if base.__impl_kwargs:
init_kwargs.update(base.__impl_kwargs)
else:
impl = cls
init_kwargs.update(kwargs)
instance = super(Configurable, cls).__new__(impl)
instance.initialize(*args, **init_kwargs)
return instance

不太清楚__new__方法作用的同学请移步:Python中的__init__和__new__

Configurable之所以这么重要,是因为他重写了__new__方法。

  他的子类可以直接不用定义__init__方法,但必须使用initialize方法来替代__init__

  另外,当实例化Configurable子类对象时,所产生的实例对象对应的类并不一定会是该子类,有可能是其他类。。。

深入tornado中的Configurable的更多相关文章

  1. 在 tornado 中异步无阻塞的执行耗时任务

    在 tornado 中异步无阻塞的执行耗时任务 在 linux 上 tornado 是基于 epoll 的事件驱动框架,在网络事件上是无阻塞的.但是因为 tornado 自身是单线程的,所以如果我们在 ...

  2. Tornado 中的 get() 或 post() 方法

    ---恢复内容开始--- Tornado 中的 get() 或 post() 方法 请求处理程序和请求参数 Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 tornado.we ...

  3. tornado中使用torndb,连接数过高的问题

    问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show ...

  4. 在tornado中使用celery实现异步任务处理之中的一个

    一.简单介绍 tornado-celery是用于Tornado web框架的非堵塞 celeryclient. 通过tornado-celery能够将耗时任务增加到任务队列中处理, 在celery中创 ...

  5. 深入tornado中的协程

    tornado使用了单进程(当然也可以多进程) + 协程 + I/O多路复用的机制,解决了C10K中因为过多的线程(进程)的上下文切换 而导致的cpu资源的浪费. tornado中的I/O多路复用前面 ...

  6. 深入tornado中的TCPServer

    1 梳理: 应用层的下一层是传输层,而http协议一般是使用tcp的,所以实现tcp的重要性就不言而喻. 由于tornado中实现了ioloop这个反应器以及iostream这个对连接的异步读写,所以 ...

  7. 深入tornado中的http1connection

    前言 tornado中http1connection文件的作用极其重要,他实现了http1.x协议. 本模块基于gen模块和iostream模块实现异步的处理请求或者响应. 阅读本文需要一些基础的ht ...

  8. 基于python3.x,使用Tornado中的torndb模块操作数据库

    目前Tornado中的torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用 1.开发环境介绍 操作系统:win8(64位),python版本:python3.6(3 ...

  9. Tornado 中 PyMongo Motor MongoEngine 的性能测试

    最近在使用 Tornado 开发 API,数据库选择了 MongoDB,因为想使用 Geo 搜索的特性.Python 可供选择的 MongoDB Drivers 可以在官网查找. 在这些 Driver ...

随机推荐

  1. mysql---数据控制语言(用户及其权限管理)

    用户管理 用户数据所在位置: mysql中的所有用户,都存储在系统数据库(mysql)中的user 表中--不管哪个数据库的用户,都存储在这里.

  2. JAVA基础知识(1)

    1.JAVA的三大体系:JME(微缩版),JSE(标准版),JEE(企业版): 2.JAVA的三大核心机制:JAVA虚拟机,垃圾回收机制,代码安全性检测 3.java开发集JDK 4.java编译器j ...

  3. windows phone 8.1开发 onedrive操作详解

    原文出自:http://www.bcmeng.com/onedrive/ 小梦今天给大家分享一下windows phone 8.1开发 onedrive中的一些操作: Windows phone 8. ...

  4. Session的两种实现

    1.若果浏览器支持cookies,则可以使用临时cookies 2.若不支持,则使用request.encodURL();重写url

  5. iOS开发优秀博客和软件推荐

    iOSBlogAndTools iOS开发优秀博客和软件推荐 本博客和工具列表由广大iOS开发者收集和推荐,如果大家有好的博客或者工具想要分享请点击:我要提交. 收到大家的提交后会及时收录与更新.Gi ...

  6. Centos7配置文件共享服务器SAMBA三步曲(转)

    1.安装 yum install samba samba-client samba-common -y 2.配置 备份已有配置 mv /etc/samba/smb.conf /etc/samba/sm ...

  7. unity传送门类似效果实现

    简述 在传送门中,核心的玩法是在地上或者墙上打开2个可以联通的洞来实现传送的效果.以此扩展加入解谜要素构成游戏的核心. 这里尝试使用unity来实现传送门的核心功能,具体功能分析如下: 1.传送门的模 ...

  8. 浅谈Java的开放封闭原则

    写在前面 最近, 接手了一个新业务,系统的架构可圈可点.但有些地方让人望而生畏,有些代码臃肿难以维护,让人不敢恭维.于是,结合了Java的开放封闭原则,对其中一部分代码进行了重构优化. 先来看下以前系 ...

  9. js求三位数的和

    例如输入508就输出5+0+8的和13: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  10. 判断是否是IE(包含IE11)

    判断是否是IE(包含IE11) if(!!window["ActiveXObject"] || "ActiveXObject" in window) { ale ...