不区分大小写的getattr

时间:2018-08-16 11:00:22

标签: python-3.x

给出一个我希望能够在不区分大小写的情况下在该模块中搜索类的模块。

例如,如果我具有以下模块utils/helpers.py

class UtilityClass:
    def __init__(self):
        ...

在另一个脚本中,我希望能够以不区分大小写的方式按其名称检索该类

import utils.helpers as util_helpers

module = getattr(util_helpers, 'utilityclass')

实现此目标的正确且最Python化的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用不区分大小写的版本覆盖builtins.getattr

import builtins
import pprint
def igetattr(obj, attr):
    for a in dir(obj):
        if a.lower() == attr.lower():
            return orig_getattr(obj, a)
orig_getattr = builtins.getattr
builtins.getattr = igetattr
print(getattr(pprint, 'prettyprinter'))

这将输出:<class 'pprint.PrettyPrinter'>