2

我希望解析关键字参数以确定它们是否也引用类型,例如以下情况:

from inspect import isclass
def convert(converting, **kwargs):
    for key, value in kwargs.items():
        if value and isclass(eval(key[1:])):
            return(eval(key[1:])(converting))
string = "Hello!"
print(convert(string, _list = True))

我很清楚eval未知字符串存在安全问题,这就是为什么我正在寻找一种更安全的方法来确定关键字名称的类型。

import builtins; isclass(getattr(builtins, 'str'))根据a_guest在此处的评论,可以通过 来检查内置类型,但我仍然对如何检查其他类感到困惑。也许isclass(getattr(globals(), key[1:]))

4

1 回答 1

3

Python 通常使用 LEGB 查找名称。由于您没有非本地人,您可以忽略E. 你知道你没有本地名字,所以L也没有了。因此,等效查找确实是调用globals和搜索builtins.

如果您只关心键,则不需要字典。这样,您可以显式传递简单的字符串,而无需玩带有额外字符的游戏:

import builtins
from inspect import isclass

def convert(target, *names):
    for name in names:
        obj = globals().get(name, getattr(builtins, name, None))
        if isclass(obj):
            return obj(target)
    return converting
于 2022-01-20T22:57:01.467 回答