考虑以下课程:
import subprocess
class Fruits():
def __init__(self):
self.TERMINAL_WIDTH = 80
def start(self):
p = subprocess.Popen(["mplayer", "other", "args"])
print "Subprocess started..."
此代码有效。
为了更好地了解最佳编码实践,我使用PEP 8 linter for Python。 linter抱怨线
p = subprocess.Popen(["mplayer", "other", "args"])
:linter说因为我们正在定义一个变量(p
),所以它应该转而使用__init__()
方法。
我想知道如何做到这一点。如果我以当前形式将该行传输到__init__()
,则在实例化Fruits()
时子进程将开始运行,这不是我想要的。你能帮帮我吗?
答案 0 :(得分:0)
首先,您要创建一个局部变量。没问题,但是当方法的执行完成时它就会丢失。
您很可能希望拥有一个实例变量。然后该行必须如下所示:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class board {
public static void addComponentsToPane(Container pane) {
pane.setLayout(new GridLayout(1, 0));
JPanel left = new JPanel();
pane.add(left);
left.setLayout(new BoxLayout(left, BoxLayout.Y_AXIS));
JPanel leftTop = new JPanel();
leftTop.setPreferredSize(new Dimension(125, 150));
leftTop.setBackground(Color.black);
left.add(leftTop);
JPanel leftBottom = new JPanel();
leftBottom.setPreferredSize(new Dimension(125, 150));
leftBottom.setBackground(Color.red);
left.add(leftBottom);
JPanel middle = new JPanel();
pane.add(middle);
middle.setLayout(new BoxLayout(middle, BoxLayout.Y_AXIS));
JPanel middleTop = new JPanel();
middleTop.setPreferredSize(new Dimension(125, 100));
middleTop.setBackground(Color.green);
middle.add(middleTop);
JPanel middleBottom = new JPanel();
middleBottom.setPreferredSize(new Dimension(125, 200));
middleBottom.setBackground(Color.yellow);
middle.add(middleBottom);
JPanel right = new JPanel();
right.setPreferredSize(new Dimension(125, 300));
right.setBackground(Color.blue);
pane.add(right);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("GridBagLayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addComponentsToPane(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
但self.p = subprocess.Popen(["mplayer", "other", "args"])
也是一个糟糕的名称选择,你应该使用更长的东西,例如p
。
然后有一个约定来初始化mplayer_proc
中的所有实例变量,它不是必需的,但在使用IDE时非常有用。你不需要给它一个最终价值。如果初始化时没有任何内容存储,只需将其设置为__init__
:
None