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])