2015-06-14 69 views
2

考虑下面的类:如何在Python中的__init __()部分定义一个子进程?

import subprocess 

class Fruits(): 
    def __init__(self): 
     self.TERMINAL_WIDTH = 80 

    def start(self): 
     p = subprocess.Popen(["mplayer", "other", "args"]) 
     print "Subprocess started..." 

此代码的工作。

为了更好地了解最佳编码实践,我使用Python的PEP 8 linter。该棉短绒抱怨行

p = subprocess.Popen(["mplayer", "other", "args"]) 

:棉短绒的说,是因为我们定义一个变量(p),它可能应该去的__init__()方法来代替。

我想知道如何做到这一点,但。如果我以当前形式将该行转移到__init__(),则当Fruits()被实例化时,子流程将开始运行,这不是我想要的。你能帮我吗?

+0

不知道为什么棉短绒会告诉你这一点,除非它被分配到'self'属性,但'p'是本地这里。在任何情况下都知道棉绒可能是错的,在这一点上,你禁用了棉绒(对于那条线)。 –

+0

你能告诉我们a)你正在使用什么棉绒布和b)确切的错误信息(确保你最小的例子产生了这个错误信息)。 –

回答

0

首先你要创建一个局部变量。这是可以的,但当方法执行完成时会丢失。

你很可能想要一个实例变量。然后,生产线必须是这样的:

self.p = subprocess.Popen(["mplayer", "other", "args"]) 

而且p是名称的一个糟糕的选择,你应该例如使用的东西越长,mplayer_proc

然后有一个约定来初始化__init__中的所有实例变量,这在使用IDE时不是必需的,但非常有用。你不需要给它一个最终价值。如果你有什么可存储在那里,而初始化,只是将其设置为None

class Fruits(): 
    def __init__(self): 
     self.TERMINAL_WIDTH = 80 
     self.mplayer_proc = None 
相关问题