为什么在执行新操作之前实例化 python class 会重复其他实例之前的操作?

Why is instantiating python class repeating former actions by other instances before doing new action?

我已尝试用一个自定义示例尽可能好地说明这个问题。

我设置了一个特殊的 class,它系统地运行了非常多的步骤 from __init__(self)

一切似乎都很好,除了这个非常棘手的运行ge 问题,每次我调用 class,它似乎回到过去并重复自己在执行新操作之前执行前两个操作。 如果我 运行 它执行五次,到第五次它会在执行第 5 个新操作之前重复前 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)
        '''

所以你有一个基本的例子class。它获取 Django 模型、处理图像并写入它们。我已经非常仔细地检查过,我认为没有理由以这种方式重复(特别是因为我直接调用 class-instancing,如下所示)

#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

这非常难运行ge -- 为什么重新调用 one_shot_long_process(obj, obj2) 仍然导致之前的 "instances" 重复它们自己?我该如何解决这个问题?

没有一些实际代码我只能猜测,但我会试一试。

您没有开始 "afresh",因为 one_shot_long_process.objone_shot_long_process.obj2class variables, not instance variables.

让我举个例子。

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]

正如其他人所说,没有一些实际代码,这是不可能的。在您发布的代码中,它没有任何区别。

附带说明一下,common naming convention for classes 是使用 CapWords,即在您的情况下 OneShotLongProcess