【发布时间】:2020-07-09 16:12:15
【问题描述】:
我正在寻找有关重置对象的适当方式的指针(目前正在规划代码)。我目前想到的如下。唯一的问题是,当我回忆起 init 时,在其他方法中定义的许多其他属性不会被删除。这对我构建对象的方式来说不是问题(所有未在 init 中定义的属性总是在运行模拟方法时重新计算)。但是,我不觉得它很干净——我更愿意完全重置到初始化状态,并且没有在 init 之外定义任何属性。
class foo:
def __init__(self, formaat):
self.format == formaat
# process format below:
if formaat == one:
self.one = 1
if formaat == two:
self.two = 2
# ... other parameter imports below - dependent on the value of self.one/self.two
def reset(self, formaat):
self.__init__(formaat)
def simulate(self):
self.reset(self.format)
print("doing stuff")
我尝试过的一件事是拥有一种复制自身的方法。虽然我认为这样做与在运行脚本中复制对象并重新分配它实际上没有区别。
class foo:
def __init__(self, formaat):
self.format = formaat
# process format below:
if formaat == one:
self.one = 1
if formaat == two:
self.two = 2
# ... other parameter imports below
def copymyself(self):
self.copy = copy.deepcopy(foo(self.format))
def simulate(self):
print("doing stuff")
理想情况下,我希望模拟方法每次都在开始时自行重置。在上面的示例代码中,我必须执行以下运行脚本。
a = foo()
# loop the code below
a.copymyself()
a.simulate()
a = a.copy
我更喜欢单行 - a.simulate() 就像使用 reset 方法的情况一样。
【问题讨论】:
-
使用一个类为“干净”的初始对象定义一个模板。每次需要清理对象时,只需创建类的新实例,然后使用新对象即可。这就是你应该如何使用你的类和对象。除非有非常特殊的要求(例如不实例化多个非常重的对象;但是当您正在清理它时,这似乎不适用于此处)。
标签: python oop constructor reset simplify