【发布时间】:2021-06-29 18:29:31
【问题描述】:
我想创建一个类的一些实例,并且我希望它们的名称来自存储在列表中的一堆字符串,我使用exec 函数来指定名称:
class Person:
def __init__(self,fname):
self.fname = fname
def get_fname(self):
return(self.fname)
people = ["Paul","Steve","Martin","Jack"]
for item in people:
exec("%s = %s" %(item,Person(item)))
但我收到此错误:
File "<ipython-input-18-a79ddedb8e1d>", line 10, in <module>
exec("%s = %s" %(item,Person(item)))
File "<string>", line 1
Paul = <__main__.Person object at 0x000001A31E1BA0D0>
^
SyntaxError: invalid syntax
【问题讨论】:
-
为什么为此您需要(或选择使用)
exec()?哪些特定约束控制哪些(如果有)非exec()-使用答案适用或可接受? -
顺便说一句,如果您的目标是能够将您的
Person序列化为字符串,然后将其反序列化回一个对象,(1)repr(),而不是str(),是合适的使用这种方式;但是 (2) 使用专门为此目的构建的 pickle 模块会更好。 -
我猜应该是
exec("%s = Person(%s)" %(item,repr(item)))