我需要将一个文件中的变量动态分配到另一个文件中。这是通过执行以下操作来尝试的。在
file1.py
:
var1 = 1
var2 = 2
然后在
file2.py
:
import file1
Class File2
def assign2(self, varName, val)
...
(do stuff)
...
setattr(file1, varName, val)
print(str(getattr(file1, varName))) -> 3, 4
def assign1(self)
self.assign2("var1", 3)
self.assign2("var2", 4)
print(str(getattr(file1, "var1"))) -> 1
print(str(getattr(file1, "var2"))) -> 2
如果我只是在
file1.var1 = 3
中的任何位置调用 file2.py
,则会发生更新,但由于某种原因,使用 setattr
进行动态分配不会发生更新。如有任何帮助,我们将不胜感激。
虽然很危险,但我发现
exec()
有效:
def assign2(self, varName, val)
if isinstance(val, (list, np.ndarray, tuple)):
br = "[]"
if isinstance(val, tuple):
br = "()"
s = f"file1.{varName} = " + br[0]
for i in range(len(val)):
s += f"{val[i]},"
s += br[1]
exec(s)
else:
exec(f"file1.{varName} = {val}")