zoukankan      html  css  js  c++  java
  • 深入tornado中的Configurable

    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子类对象时,所产生的实例对象对应的类并不一定会是该子类,有可能是其他类。。。

  • 相关阅读:
    西子凌波26: 看各路新秀 2015-04-19
    西子凌波21:美元 2015-03-19
    西子凌波04:再读 教你炒股票104:几何结构与能量动力结构1有感 2011-05-23
    西子凌波08:闲聊~~共勉~~ 感恩缠主 2013-12-07
    西子凌波07:传统底部形态缠论解析 2011-10-26
    西子凌波03:缠论中的MACD 2011-05-21
    数组内Merge
    leetcode -- Decode Ways
    leetcode -- Distinct Subsequences
    leetcode -- permutation 总结
  • 原文地址:https://www.cnblogs.com/yezuhui/p/6863783.html
Copyright © 2011-2022 走看看