求助, 这段代码怎么复用

2019-12-26 15:50:00 +08:00
 plko345

麻烦大佬看看, 注 1 的函数是变化的, 其它部分基本一样, 有多个类似的统计, 菜鸟一枚, 先谢过

def cal_category_ecs_cpu_core_amount_by_tags(**tags):
    """合计机器 CPU 核心总数, 通过标签过滤"""
    amount = 0
    for instance_id in get_category_instance_id_by_tags(**tags):
        ecs_obj = ECSInstance(instance_id)
        cpu_core = ecs_obj.get_cpu_core()    # 注 1
        amount += cpu_core

    return amount

def cal_category_ecs_memory_amount_by_tags(**tags):
    """合计机器内存总数, 通过标签过滤"""
    amount = 0
    for instance_id in get_category_instance_id_by_tags(**tags):
        ecs_obj = ECSInstance(instance_id)
        memory = ecs_obj.get_memory()    # 注 1
        amount += memory

    return amount

我的想法是将这个类的实例方法作为参数传进去, 但这样处理似乎不是很合适, 而且这样处理的话方法是需要改成 类方法 或者静态方法吗?

4853 次点击
所在节点    Python
21 条回复
cassidyhere
2019-12-27 09:58:10 +08:00
def stats(callback_name, **tags):
for instance_id in get_category_instance_id_by_tags(**tags):
ecs_obj = ECSInstance(instance_id)
yield getattr(ecs_obj, callback_name)


def cal_category_ecs_cpu_core_amount_by_tags(**tags):
return sum(stats('get_cpu_core', **tags))


def cal_category_ecs_memory_amount_by_tags(**tags):
return sum(stats('get_memory', **tags))


其实应该修改的是 ECSInstance

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX