用任意数量的属性实例化类

2 投票
2 回答
1738 浏览
提问于 2025-04-17 13:48

这个问题主要是在讨论Python类的内容,但其实可以更广泛地应用。我正在创建一个叫做m的类,这个类会用四个变量来初始化,然后我想把这些变量赋值给类的实例。现在的写法是这样的:

class mm(object):
  def __init__(self, a, b, c, r):
    self.a = a
    self.b = b
    self.c = c
    self.r = r
  # etc.

不过,我希望能在一行代码里把这些变量赋值给self,就像下面的伪代码那样:

def __init__(self, a, b, c, r):
  self.varname = var for var in [a, b, c, r]

如果能把这个方法扩展到任意数量的变量,那就更好了,这样就能得到类似于:

def __init__(self, **kwargs):
  assign(self, varname, value) for varname, value in kwargs.iteritems()

不过,按照我所知道的,似乎不太可能像那样循环执行赋值语句。有没有人知道怎么做到这一点?

2 个回答

2

你还可以使用实例的命名空间字典来进行批量赋值:

class mm(object):
    def __init__(self, **kwargs):
       self.__dict__.update(kwargs)
6

你可以使用 setattr 这个函数:

class mm(object):
    def __init__(self, **kwargs):
        for varname, value in kwargs.iteritems():
            setattr(self, varname, value)

撰写回答