【发布时间】:2018-10-04 14:03:01
【问题描述】:
在我的 python 脚本中,我定义了一个类似于以下(当然是假的)类的类:
import copy
class Example:
def __init__(self, a, b):
self.a = a
self.b = b
self.__default__ = copy.deepcopy(self.__dict__)
self.t = 0
self.d = False
def do(self):
self.a += self.b - self.t
self.t += 1
if self.t == self.b:
self.d = True
return self.a
def reset(self):
self.__init__(**self.__default__)
现在,我想将此类的一个实例传递给我的主函数,并反复将该实例重置为其默认状态。尽管看了here、here、here 和here,但我还是无法进行。下面的工作示例给出了所需的结果,但显式地重置了 main 函数中的实例。功能失调的示例是我使用reset 方法使其工作的众多尝试之一。
# working example:
def main(x):
agg = []
for i in range(x):
klass = Example(1, 3)
while not klass.d:
a = klass.do()
agg.append(a)
return agg
# dysfunctional example:
def main2(klass, x):
agg = []
for i in range(x):
klass.reset()
while not klass.d:
a = klass.do()
agg.append(a)
return agg
然后main(5)给了
res = main(5)
print(res)
>>> [4, 6, 7, 4, 6, 7, 4, 6, 7, 4, 6, 7, 4, 6, 7]
而
ex = Example(1, 3) # default state
res = main2(ex, 5)
print(res)
抛出错误:TypeError: __init__() got an unexpected keyword argument '__default__'
由于我想避免由于不同的原因而不得不在主脚本中重新实例化该类,如果有人可以通过 reset 方法帮助我,我将不胜感激。
【问题讨论】:
-
你想如何神奇地运行reset方法的功能而不调用它?
-
您是否(最初)以“默认状态”将对象传递给主函数?
-
@MadPhysicist 我想我一开始并不清楚这个问题。现在我确实在
main2函数中调用了reset方法。 -
@jedwards 对于这个例子,是的。
Example(1, 3)是类的默认状态。 -
main2 中的返回 agg 缩进不好?