Python 制作多个对象的正确方法是什么?
我正在学习python,现在遇到了一个问题 我必须创建多个对象,“存储”它们以供以后使用,然后将输出保存到文件中。我的GUI界面是用Qt4制作的 到目前为止,我所做的是: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
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
- 名称(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):
在我按下按钮时正在运行。当我启动appIsadd_yaml()
YamlPrepr类的一个方法时,不是吗?不管怎样,每次执行self.mod=YamlPrepr(self.module\u name.displayText())
时,self.mod
的上一个值都会被丢弃。也许你所需要做的就是让self.mod
成为对象的列表,然后append()
newYamlPrepr
每次调用add_yaml()
实例,就像你在处理self.objects
一样。