CMDB 设计(三) 名称简化 及 插件化开发


名称简化 ide

cmdb.types.Int   这样名字太长,对用户来说只须要记住最后一个字段便可函数

因此进行约定,cmdb.types 下的int 能够做为type的名称spa

模块一旦加载建立以后,这些类都会放在模块的全局字典中orm

到这里用户能够送入两种名称:rem

 

def get_instance(type:str, **option:dict):  # 能够传递cmdb.types.IP 或者 IP
    key = ",".join("{}={}".format(k,v) for k,v in sorted(option.items()))
    key = "{}|{}".format(type,key)
    print(key)

经过globals() 进行快速查找到当前模块的全部类
get

找到送进来的短名称cmd

改进代码,将:it

 

def get_class(type:str):
    cls = classse_cache.get(type)
    if cls:
        return cls

    m, c = type.rsplit('.', maxsplit=1)
    mod = importlib.import_module(m)
    cls = getattr(mod, c)
    classse_cache[type] = cls
    print('cls>>>>',cls)

    if issubclass(cls, BaseType):
        return cls
    raise TypeError('hhhhh')

改成:io

 

def get_class(type:str):
    cls = classse_cache.get(type)
    if cls:
        return cls
    m,c = type.rsplit('.', maxsplit=1)
    print(m,c)
    globals().get(type)     # 获取全局名词空间

第一次加载的时候先去找cache,若是未命中,则向办法建立并加入
form


若是cache存在,那如何判断有想要的类?前提是必须加载才有做用

加入两个方法,将其加载到字典

构建inject函数

 

def inject():
    for name,types in globals().items():
        print(name,types)
# 运行函数
inject()

# 查看结果略

经过找到全局获取并判断是否在全局名词空间中,判断传递的信息是否符合当前

相关文章
相关标签/搜索