我已经尝试用一个自定义示例尽可能好地表示这个问题。
我设置了一个特殊的课程,系统地通过from __init__(self)
向前的大量步骤。
一切似乎都很好,除了这个非常奇怪的问题,每次我调用类,它似乎回到过去,并在做新动作之前重复自己的前两个动作。如果我运行它五次,到第五次时,它将在执行第五次新操作之前重复前4个相同的操作,以此类推。
这是一个很奇怪的问题。这是django环境中的python交互。希望我的代码示例能很好地显示这个问题:#file helper_stuff.py
class one_shot_long_process():
obj=''
obj2=''
def init(self, obj, obj2):
self.obj=obj
self.obj2=obj2
self.complex_action()
self.complex_action_2()
def complex_action(self):
'''do lots of things in a row with obj'''
def complex_action_2(self):
'''
Do more stuff, make decisions, loop, etc
with obj 1, 2
make entries, do writes
>>>> WRITE FILES by number (jpegs)
'''
这就是这个类的一个基本例子。它获取django模型,处理图像,并写入它们。我已经相当仔细地检查过了,我认为没有理由以这种方式重复它(特别是因为我直接调用了类实例化,如下所示)
#file interactive_stuff.py
#!/home/leo/.virtualenvs/illo/bin/python3 -i
from helper_stuff import one_shot_long_process
>>> one_shot_long_process(obj, obj2)
#WRITES FILE 1.jpg
>>> one_shot_long_process(obj, obj2)
#re-WRITES FILE 1.jpg
#WRITES FILE 2.jpg
>>> one_shot_long_process(obj, obj2)
#re-WRITES FILE 1.jpg
#re-WRITES FILE 2.jpg
#WRITES FILE 3.jpg
这很奇怪——为什么重新调用one_shot_long_process(obj, obj2)仍然会导致以前的"实例"重复自己?我怎么才能避开这个问题呢?
如果没有实际的代码,我只能猜测,但我会试一试。
您没有"重新"开始,因为one_shot_long_process.obj
和one_shot_long_process.obj2
是类变量,而不是实例变量。
让我举个例子来说明。
class Foo():
l = []
def __init__(self, x):
self.l.append(x)
print self.l
class Bar():
def __init__(self, x):
self.l = []
self.l.append(x)
print self.l
Foo(4) # prints [4]
Foo(4) # prints [4, 4]
Bar(4) # prints [4]
Bar(4) # prints [4]
正如其他人所说,如果没有实际的代码,就无法判断。在你发布的代码中,它没有什么区别。
顺便说一句,类的通用命名约定是使用CapWords
,即在您的情况下使用OneShotLongProcess
。