是否可以动态实例化一个写在字符串中的类,而不需要写到文件中?

如何实例化存储在原始字符串中的类?my_class 而不需要先把这个字符串保存到文件中去?

my_class = r'''class A:
    def print(self):
        print('Hello World')
    '''

my_class_object = string_to_class()

my_class_object.print()

在上面的代码中,我正在寻找一个函数的实现,即 string_to_class() 的类的对象,返回 my_class.

上述代码的预期输出是 Hello World.

解决方案:

你只需要使用 exec: 它支持动态执行Python代码。

import re 
def string_to_object(str_class, *args, **kwargs):
    exec(str_class)
    class_name = re.search("class ([a-zA-Z_][a-zA-Z0-9_]*)", str_class).group(1)
    return locals()[class_name](*args, **kwargs)

你可以使用 string_to_object 函数来自动创建一个指定类的对象。

my_class = '''
class A:
    def print(self):
        print("Hello World")
'''
a = string_to_object(my_class)
a.print() # Hello World

你也可以建立更复杂的东西:

my_class = '''
class B:
    def __init__(self, a, b, c=0, d=1):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
'''
b = string_to_object(my_class, 4, 5, c=7)
print(b.a) # 4
print(b.b) # 5
print(b.c) # 7
print(b.d) # 1

还有:

class C:
    pass

my_class = '''
class D(C):
    pass
'''

d = string_to_object(my_class)

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在一个因子变量的多个子集上循环线性回归?

2022-9-9 8:37:20

未分类

含有环境变量的if-else

2022-9-9 8:37:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索