有没有一种在Python类中分配实例变量的简单方法?

时间:2017-11-22 20:51:09

标签: python python-2.7

在Python 2.7中定义类时,将变量提供给init()函数,然后使用例如self.x

将这些变量分配给实例变量。
class NewClass(object): 
  def __init__(self, x, y):      
    self.x = x                    
    self.y = y

如果使用大量变量,是否有办法简化此过程,即不必明确定义每个实例变量?

或者是否有明确定义它们的充分理由?

3 个答案:

答案 0 :(得分:2)

如果你想要一些不可变的东西,

collections.namedtuple很有用:

>>> from collections import namedtuple
>>> NewClass = namedtuple('NewClass', 'x y')
>>> obj = NewClass(x=10, y=14)

>>> obj
NewClass(x=10, y=14)

答案 1 :(得分:0)

class NewClass(object): 
  def __init__(self, **kwargs):
    self.validate(kwargs) # optional      
    self.__dict__.update(kwargs)

但整个想法有点臭

您还可以使用带有可接受kwargs密钥的静态集,validate会检查传递kwargs是否包含该集合的子集

答案 2 :(得分:0)

您可以使用__dict__

class NewClass:
    def __init__(self, *args):
        self.headers = ["var{}".format(i+1) for i in range(len(args))]#optional, can use an list of variable names you are expecting
        for a, b in zip(self.headers, args):
            self.__dict__[a] = b