gpt4 book ai didi

python - 检查类名(字符串)是否用于 Python 中的某个类

转载 作者:行者123 更新时间:2023-12-04 17:06:20 27 4
gpt4 key购买 nike

如何获得(在当前范围内)在给定名称下可用的确切类变量?我想写一个这样的函数:

from my_module import ClassA # A subclass of my_other_module.BenevolentClass
from my_other_module import my_function
a = 'ClassA'
cls_var = my_function(a)
o = cls_var()

这样我就可以向 my_function 提供任何字符串,只要该字符串在调用者的命名空间中作为类名可用,它就会生成正确的类,就像我将字符串直接复制粘贴到代码中一样。原因是我需要为复杂的对象创建例程提供类名,但要避免 eval如果可能。我目前的实现是这样的:

def my_function(name):
if name in globals():
c = globals()[name]
# Actually a complex class whitelist
if issubclass(c, BenevolentClass):
return c
else:
raise ValueError(f'Potentially malicious class {name}')

但这显然从 my_other_module 产生 globals(),这不是我想要的。我想要在确切的代码行中可用的所有类,其中 my_function被调用(可能在完全不同的模块中,从另一个模块中调用)。

最佳答案

您可以将全局字典传递给 my_function。

def my_function(name, g):
if name in g:
...

cls_var = my_function(a, globals())

关于python - 检查类名(字符串)是否用于 Python 中的某个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55490310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com