代码小工具1--------关于目录映射

当有比较大量的对象需要各自实现各自类别的对象化,而且他们的对象化类在同一个目录下,如何根据名称的映射实现统一的对象化。
如下,将Fruit类的对象映射为各自的水果类,在objecting_model文件中进行调用实现实例化。
目录如下:
在这里插入图片描述objection_config.py文件

import importlib
from collections import defaultdict


class Fruit_Config():
    MODULE_PATH = "objection.objection_files."
    FRUIT_CONFIG_DICT = {
        "苹果": [("apple", "Apple")],
        "桃子": [("peach", "Peach")],
        "梨": [("pear", "Pear")],
    }

def import_object_config(config_dict,module_path,debug_dict):
    result_dict = defaultdict(list)
    for name, file_list in config_dict.items():
        if isinstance(file_list, tuple):
            file_list = [file_list]
        if debug_dict and name not in debug_dict:
            continue
        for file_name, class_name in file_list:
            module_full_path = module_path + file_name

            try:
                module = importlib.import_module(module_full_path)
                fruit_class = getattr(module, class_name)
            except (ModuleNotFoundError, AttributeError) as e:
                print('objection___{}nofoundModule----'.format(name))
            else:
                result_dict[name].append(fruit_class)
    return result_dict

objecting_model.py文件

from objection.Fruit import Fruit
from objection.objection_config import *


apple1 = Fruit(['苹果','梨'],'red', 78, "江西")
apple2 = Fruit(['苹果','梨'],'red', 78, "江西")
peach = Fruit(["桃子",], "pink", 980,)

fruit_list = [apple1, apple2, peach]
debug_dict = {}
fruit_dict = defaultdict(list)
fruit_config = import_object_config(Fruit_Config.FRUIT_CONFIG_DICT, Fruit_Config.MODULE_PATH,debug_dict)

for i in fruit_list:
    for name in i.name_list:
        fruit_class_list = fruit_config.get(name, [])
        for fruit_class in fruit_class_list:
            fruit = fruit_class(i)
            fruit_dict[fruit.chinese_name].append(fruit)
print(fruit_dict)

Fruit.py文件

class Fruit():
    def __init__(self,
                 name_list: [str],
                 color: str = None,
                 count: int = 0,
                 location: str = ''
                 ):
        self.name_list = name_list
        self.color = color
        self.count = count
        self.location = location

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值