专栏首页大猪的笔记重构:统一输出

重构:统一输出

在项目中,统一返回的入口和出口非常重要。因为你永远没办法知道产品经理下个版本要在返回结果中加什么乱七八糟的东西。

对item的修改,最好抽象成一个组合。用插件的方式进行修改。(有点像commands模式)

首先,创建一个基友类:

class BaseResp(object):
    # 返回结果的基类
    def __init__(self, result):
        self.result = result
        self.modifiers = []

    def add_modifier(self, modifier, args):
        self.modifiers.append([modifier, args])

    def run_modifer(self):
        for item in self.result:
            for modifer in self.modifiers:
                print(modifer)
                modifer[0](item, modifer[1])

子类从基友那里派生出来,这样可以预定义行为。

import baseresp

class ArticleResp(baseresp.BaseResp):
    def __init__(self, result):
        baseresp.BaseResp.__init__(self, result)
        self.add_modifier(add_gif, None)

def add_gif(item, args):
    is_gif = 0
    for pic in item['data']['imgs']:
        if pic['type'] == 'gif':
            is_gif = 1
    item['data']['Gif'] = is_gif

对所有article的数据,检查是否为gif类型,加上gif标签。 这个行为是预定义行为,将会在所有的article中显现。

测试一下:

import article_resp

result = [
    {
        'types': 'article',
        'data':{
            'name': 'hello',
            'imgs':[
                {
                    'type': 'jpeg',
                    'name': 'azdes.jpg'
                },
                {
                    'type': 'jpeg',
                    'name': 'hello.jpg'
                },
            ]
        }
    },
     {
        'types': 'article',
        'data':{
            'name': 'world',
            'imgs':[
                {
                    'type': 'gif',
                    'name': '1azdes.gif'
                },
                {
                    'type': 'jpeg',
                    'name': '3hello.jpg'
                },
            ]
        }
    }
]

article_resp = article_resp.ArticleResp(result)
article_resp.run_modifer()
print(result)

代码很简单,但带来的效果是巨大的。不这样做的代价是惨重的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python笔记:线程

    2 锁 #创建锁 mutex = threading.Lock() #锁定 mutex.acquire([timeout]) #释放 mutex.release...

    超级大猪
  • python笔记:面向对象

    1 封装与断言 在Python中,用类封装概念十分简单,下面是一个类的使用。所有的类都继承自object。在类的成员函数中,第一个参数必须是self,否则,这个...

    超级大猪
  • go笔记:go语言中使用协程异步并行

    超级大猪
  • 第五天:结构型模式--适配器模式

    从现在开始就进入到了第二个模式大类结构型模式。所谓结构型模式就是处理一个系统中不同实体(例如类和对象)之间的关系,关注的是通过一种简单的对象组合方式来创造新的功...

    喵叔
  • Python类继承简单实现

    [work@db-testing-com06-vm3.db01.baidu.com python]$ python inherit.py init Schoo...

    阳光岛主
  • python - 面向对象

    --------------------------------------------------------------------------------...

    py3study
  • 面向对象编程-类

    面向对象编程OOP (object-oriented programming)是最有效的软件编写方法之一,面向对象是利用“类”和“对象”来创建各种模拟来实现对真...

    用户1679793
  • 在bash中检测进程是否正在运行

    比如我们启动了一个这样的进程python -m SimpleHTTPServer 8000,我们想检测这个进程是否存在,可以这样。

    技术小黑屋
  • windows linux—unix 跨平台通信集成控制系统----系统硬件信息获取

    控制集成系统需要了解系统的各项硬件信息,之前我们设计的时候,习惯使用c函数来搞,后来可能发现程序的移植性收到了一些影响,比如unix内核的一些c函数在linux...

    流川疯
  • python常用知识梳理

    接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理: 1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ ...

    洗尽了浮华

扫码关注云+社区

领取腾讯云代金券