Python - 无法使全局变量成为 class 中的属性
Python - Cannot make global variable become a attribute in a class
我想制作一个 class,它在每个循环中生成新变量并将其保存到对象中,但 python 显示错误:
class test:
def __init__(self, bn = [1,2,3], fl = [1,2,3]):
for i in range(1,len(bn)):
self.globals()['fl_%s' % i] = fl[i-1]
model = test(bn = [1,2,3], fl = [1,2,3])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-49-22b3186d8727> in <module>()
----> 1 model = test(bn = [1,2,3], fl = [1,2,3])
<ipython-input-48-7c8e68e85b8c> in __init__(self, bn, fl)
2 def __init__(self, bn = [1,2,3], fl = [1,2,3]):
3 for i in range(1,len(bn)):
----> 4 self.globals()['fl_%s' % i] = fl[i-1]
AttributeError: 'test' object has no attribute 'globals'
我想要 model.fl_1
之类的东西,但是我使用 globals()
函数的方式似乎有问题,我不知道如何解决这个问题...
或者有其他方法可以做我想做的事吗?非常感谢!
如果您想以编程方式从字符串中设置 class 的属性,那么您需要 setattr()
:
class test:
def __init__(self, bn=[1, 2, 3], fl=[1, 2, 3]):
for i in range(1, len(bn)):
setattr(self, 'fl_%s' % i, fl[i - 1])
您的问题是您正在尝试进行函数调用
self.globals()
您需要指定函数或将其更改为这样的属性:
class test:
def __init__(self, bn = [1,2,3], fl = [1,2,3]):
self.globals = {}
for i in range(1,len(bn)):
e = str('fl_%s' % i)
self.globals[e] = fl[i-1]
model = test(bn = [1,2,3], fl = [1,2,3])
这样你就不会出现同样的错误并且会创建一个字典。
请尝试使用 global 而不是 globals,它可能会起作用。
class test:
def __init__(self, bn = [1,2,3], fl = [1,2,3]):
for i in range(1,len(bn)):
self.global()['fl_%s' % i] = fl[i-1]
model = test(bn = [1,2,3], fl = [1,2,3])
我想制作一个 class,它在每个循环中生成新变量并将其保存到对象中,但 python 显示错误:
class test:
def __init__(self, bn = [1,2,3], fl = [1,2,3]):
for i in range(1,len(bn)):
self.globals()['fl_%s' % i] = fl[i-1]
model = test(bn = [1,2,3], fl = [1,2,3])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-49-22b3186d8727> in <module>()
----> 1 model = test(bn = [1,2,3], fl = [1,2,3])
<ipython-input-48-7c8e68e85b8c> in __init__(self, bn, fl)
2 def __init__(self, bn = [1,2,3], fl = [1,2,3]):
3 for i in range(1,len(bn)):
----> 4 self.globals()['fl_%s' % i] = fl[i-1]
AttributeError: 'test' object has no attribute 'globals'
我想要 model.fl_1
之类的东西,但是我使用 globals()
函数的方式似乎有问题,我不知道如何解决这个问题...
或者有其他方法可以做我想做的事吗?非常感谢!
如果您想以编程方式从字符串中设置 class 的属性,那么您需要 setattr()
:
class test:
def __init__(self, bn=[1, 2, 3], fl=[1, 2, 3]):
for i in range(1, len(bn)):
setattr(self, 'fl_%s' % i, fl[i - 1])
您的问题是您正在尝试进行函数调用
self.globals()
您需要指定函数或将其更改为这样的属性:
class test:
def __init__(self, bn = [1,2,3], fl = [1,2,3]):
self.globals = {}
for i in range(1,len(bn)):
e = str('fl_%s' % i)
self.globals[e] = fl[i-1]
model = test(bn = [1,2,3], fl = [1,2,3])
这样你就不会出现同样的错误并且会创建一个字典。
请尝试使用 global 而不是 globals,它可能会起作用。
class test:
def __init__(self, bn = [1,2,3], fl = [1,2,3]):
for i in range(1,len(bn)):
self.global()['fl_%s' % i] = fl[i-1]
model = test(bn = [1,2,3], fl = [1,2,3])