Python类属性 - 重置

5 投票
5 回答
8149 浏览
提问于 2025-04-15 18:20

在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

这些属性需要在我程序的每次循环中重置,除了像上面那样设置为零,还有什么更好的方法呢?

谢谢!

5 个回答

2

这段代码的意思是……

首先,它定义了一些变量,这些变量就像是用来存储信息的盒子。你可以把它们想象成你在写作业时用来记笔记的地方。

接下来,代码会执行一些操作,比如计算、比较或者是改变这些变量的值。就像你在做数学题时,先把数字放进去,然后进行加减乘除。

最后,代码会输出结果,可能是显示在屏幕上,或者是保存到文件里。就像你完成作业后,把答案写在纸上一样。

总之,这段代码的作用就是通过一系列步骤来处理数据,并给出最终的结果。

class MyClass(object):
  def __init__(self):
    attribs = 'time', 'pos', 'vel', 'acc', 'rot', 'dyn'
    vars(self).update((x, 0) for x in attribs)
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,虽然我觉得我们可能已经走得太远了,这可能会违反面向对象编程的一些原则呢 :)

4

我不太想在init方法里重置它们,而是想定义一个reset方法来处理这个问题,然后在init里和每次后续的循环之前都调用这个reset方法。

撰写回答