什么是在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
这些需要在我的程序的每次迭代中重置,这是最好的方法,而不是如上所示设置为零
由于
答案 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