Python 制作多个对象的正确方法是什么?

Python 制作多个对象的正确方法是什么?,python,grammar,Python,Grammar,我正在学习python,现在遇到了一个问题 我必须创建多个对象,“存储”它们以供以后使用,然后将输出保存到文件中。我的GUI界面是用Qt4制作的 到目前为止,我所做的是: class YamlPrepr: def __init__(self,name): self.name = name self.module = "" self.module_opt = "" self.condition = "" sel

我正在学习python,现在遇到了一个问题

我必须创建多个对象,“存储”它们以供以后使用,然后将输出保存到文件中。我的GUI界面是用Qt4制作的

到目前为止,我所做的是:

class YamlPrepr:
    def __init__(self,name):
        self.name = name
        self.module = ""
        self.module_opt = ""
        self.condition = ""
        self.param = ""
        self.param_opt = ""

    def __repr__(self):
        s1 = "- name: %s" % self.name
        if (self.param and self.param_option) == "":
            s2 = "  %s: name=%s" % (self.module, self.module_opt)
        else:
            s2 = "  %s: name=%s" % (self.module, self.module_opt) + " %s=%s" % (self.param, self.param_option)
        return s1 + "\n" + s2


    def modulepak(self,line,line2):
        s = line.split(" ")[0]
        self.module = s
        self.module_opt = line2

    def parameter(self,line1,line2):
        self.param = line1
        self.param_opt = line2
我使用这样的类:

def add_yaml(self):
    self.objects.append(self.module_name.displayText())
    self.mod = YamlPrepr(self.module_name.displayText())
    self.mod.modulepak(self.job_box.currentText(),self.option_line.displayText())
    if self.param_check.isChecked() == True:
        self.mod.parameter(self.param_box.currentText(),self.choice_line.displayText())
    self.display_line(self.mod.__repr__())
信息:
self.module\u name.displayText()
是一个QLineEdit,输出是一个字符串
self.module\u name.displayText()
是一个QLineEdit,输出是一个字符串
self.job\u box.currentText()
是一个QComboBox,输出是一个字符串
self.param_box.currentText()
是一个QComboBox,输出是一个字符串
self.option\u line.displayText()
是一个QLineEdit,输出是一个字符串
self.choice\u line.displayText()
是一个QLineEdit,输出是一个字符串

每次我运行这一行时,我相信该对象已被销毁并初始化了一个新对象。我说得对吗

有没有一种方法可以让多个对象处于“活动”状态,并向它们添加更多的
def parameter
def modulepak
,无论何时何地,我都可以将它们保存到一个文件(txt或json)中

例:

对象1

  • 姓名(mariadb)
  • 参数:状态、强制、更新
  • modulepak:apt
反对意见2

  • 名称(httpd)
  • 参数:状态,更新
  • modulepak:yum
编辑: 我正在添加调用
add_yaml()
的类

class YamlGenerator(QtGui.QFrame):
    def __init__(self, parent):
        QtGui.QFrame.__init__(self, parent)
        file_path = os.path.abspath('ui/yaml.ui')
        uic.loadUi(file_path, self)
        self.objects = []
        self.module_combo.currentIndexChanged.connect(self.check_module_name)
        self.job_box.currentIndexChanged.connect(self.show_params)
        self.module_btn.pressed.connect(self.add_module_index)
        self.condition_btn.pressed.connect(self.add_condition_index)
        self.add_mod_btn.pressed.connect(self.add_yaml)
        self.save_yaml.pressed.connect(self.save_temporary_to_file)
        self.check_module_name()

    def add_yaml(self):
        self.objects.append(self.module_name.displayText())
        self.mod = YamlPrepr(self.module_name.displayText())
        self.mod.modulepak(self.job_box.currentText(),self.option_line.displayText())
        if self.param_check.isChecked() == True:
            self.mod.parameter(self.param_box.currentText(),self.choice_line.displayText())
        self.display_line(self.mod.__repr__())

我对Python和C++的QT非常熟悉,但我真的不知道你需要什么?你有错误吗?或者你只是想确保你有多个对象吗?我只是想要更多的对象。你想在运行时动态创建对象吗?不是在运行时,
def add\u yaml(self):
在我按下按钮时正在运行。当我启动appIs
add_yaml()
YamlPrepr类的一个方法时,不是吗?不管怎样,每次执行
self.mod=YamlPrepr(self.module\u name.displayText())
时,
self.mod
的上一个值都会被丢弃。也许你所需要做的就是让
self.mod
成为对象的
列表,然后
append()
new
YamlPrepr
每次调用
add_yaml()
实例,就像你在处理
self.objects
一样。