【发布时间】:2019-06-13 04:34:25
【问题描述】:
假设我有一个包含有效 python 类(不是类名)的字符串。例如:
class_template = """
class MyClass(object):
def __init__(self, name):
self.name = name
def print_name(self):
print('My name is: ' + self.name)
def add_whatever(a, b):
return a + b
"""
是否可以在 python 中实现一个函数(在下面的示例中为string_to_class),它接收这个字符串并从中创建一个 python 类,以便我以后可以实例化该类?
class_template = """
class MyClass(object):
def __init__(self, name):
self.name = name
def print_name(self):
print('My name is: ' + self.name)
def add_whatever(a, b):
return a + b
"""
MyClass = string_to_class(class_template)
my_class_instance = MyClass('Ben')
print(MyClass.add_whatever(2, 3))
my_class_instance.print_name()
输出应该是:
5
My name is: Ben
一种可能的解决方案是将字符串写入MyClass.py 文件并使用__import__() 加载它。还有其他(内存中的)解决方案吗?
谢谢你的回答。
【问题讨论】:
-
我提出 x/y 问题:为什么你想这样做?您有几个特征听起来像是问题背后的系统设计不雅。
-
你可以查看
eval函数族,但我们先看看是否存在设计缺陷。 -
您可以为此使用
exec(这实际上是namedtuple所做的,或在某些时候所做的)。 -
@Prune 我不想这样做。我只是对 python 的功能感兴趣。就这样。感谢您的回答。
-
@juanpa.arrivillaga 谢谢。
标签: python reflection code-generation