Python类属性 - 重置

时间:2010-01-22 09:01:46

标签: python class attributes

什么是在Python中重置类属性的最佳方法。

我有一个类,它有大约20个类属性,在我的初始化中我有

class MyClass:
    def __init__(self)
       self.time=0
       self.pos=0
       self.vel=0
       self.acc=0
       self.rot=0
       self.dyn=0

这些需要在我的程序的每次迭代中重置,这是最好的方法,而不是如上所示设置为零

由于

4 个答案:

答案 0 :(得分:4)

我不想在init方法中重置它们,而是为此定义reset方法,并在reset之前和每次后续迭代之前调用init。< / p>

答案 1 :(得分:4)

您可以使用vars()返回可以编辑的值字典。

类似的东西

class A:
    def __init__(self):
        self.a=1
        self.b=1

    def reset(self):
        dic = vars(self)
        for i in dic.keys():
            dic[i] = 0

inst = A()
print inst.a , inst.b  # will print 1 1
inst.reset()
print inst.a , inst.b  # will print 0 0

如果您不想编辑其他属性,可以执行类似的操作

def reset(self):
    dic = vars(self)
    noEdit = ['a']
    for i in dic.keys():
        if i not in noEdit:
            dic[i] = 0

这不会编辑变量a,虽然我认为我们已经对此有所了解,我们可能会在这里打破oop原则:)

答案 2 :(得分:2)

class MyClass(object):
  def __init__(self):
    attribs = 'time', 'pos', 'vel', 'acc', 'rot', 'dyn'
    vars(self).update((x, 0) for x in attribs)

答案 3 :(得分:0)

我不确定这是否更整洁,但是:

class MyClass:
    def __init__(self):
        for v in ('time', 'pos', 'vel', 'acc', 'rot', 'dyn'):
            exec("self.%s = 0" % v)

正如SilentGhost建议的那样,你应该将它们放在一个理智的数据结构中,例如元组。

class MyClass:
    def __init__(self):
        self.values = 20*(0,)

或者,您可以使用字典:

class MyClass:
    def __init__(self):
        self.data = {}
        for v in ('time', 'pos', 'vel', 'acc', 'rot', 'dyn'):
        self.data[v] = 0
相关问题