我想把WinMo类中getMo方法中得到tstdata和comdata数据赋值给本类data1属性和data2属性,再在WinLoc类引用WinMo类中data1属性和data2属性,请问应该怎么做?一下代码是自己想到的方法但是引用的属性仍为空,请帮忙解决一下!
class WinMo(QWidget,mo):
data1 = [] #属性
data2 = [] #属性
def __init__(self, *args, **kwargs):
super(WinMo, self).__init__(*args, **kwargs)
self.setupUi(self)
self.scanButton.clicked.connect(self.getMo)
def getMo(self):
tstsql = '''
'''
orcur.execute(tstsql)
tstdata = orcur.fetchall()
self.data1 = tstdata #传到本类的属性中
print("1号筛选总数据",tstdata)
comsql = '''
'''
sqlcur.execute(comsql)
comdata = sqlcur.fetchall()
self.data2 = comdata #传到本类的属性中
print("2号筛选总数据是",comdata)
break
class WinLoc(QTableWidget,loc):
def __init__(self, *args, **kwargs):
self.loadData()
def loadData(self):
self.mo = WinMo()
print("1号准备加载数据",self.mo.data1) #引用WinMo类属性
print("2号准备加载数据",self.mo.data2) #引用WinMo属性
if __name__ == '__main__':
app = QApplication(sys.argv)
win1 = WinMo()
win1.show()
sys.exit(app.exec_())
【以下回答由 GPT 生成】
在Python中,可以使用实例变量和类变量来解决这个问题。
实例变量是每个实例对象所拥有的变量,而类变量是所有实例对象共享的变量。
在WinMo类中,data1和data2属性应该定义为类变量,而不是实例变量。这样才能在不同实例之间共享数据。
在getMo方法中,可以直接通过类名WinMo来访问类变量,并将tstdata和comdata赋值给data1和data2属性。
在WinLoc类中,创建WinMo实例对象,并通过该对象访问WinMo类中的data1和data2属性。
以下是优化后的代码:
class WinMo(QWidget, mo):
data1 = [] # 类变量
data2 = [] # 类变量
def __init__(self, *args, **kwargs):
super(WinMo, self).__init__(*args, **kwargs)
self.setupUi(self)
self.scanButton.clicked.connect(self.getMo)
def getMo(self):
"""
在getMo方法中获取tstdata和comdata数据,将其赋值给WinMo类的data1和data2属性
"""
tstsql = '''
'''
orcur.execute(tstsql)
tstdata = orcur.fetchall()
WinMo.data1 = tstdata # 赋值给类变量
print("1号筛选总数据", tstdata)
comsql = '''
'''
sqlcur.execute(comsql)
comdata = sqlcur.fetchall()
WinMo.data2 = comdata # 赋值给类变量
print("2号筛选总数据是", comdata)
break
class WinLoc(QTableWidget, loc):
def __init__(self, *args, **kwargs):
self.loadData()
def loadData(self):
"""
在WinLoc类中引用WinMo类中的data1属性和data2属性
"""
print("1号准备加载数据", WinMo.data1) # 引用WinMo类的data1属性
print("2号准备加载数据", WinMo.data2) # 引用WinMo类的data2属性
if __name__ == '__main__':
app = QApplication(sys.argv)
win1 = WinMo()
win1.show()
sys.exit(app.exec_())
现在,假设WinMo类的实例对象调用了getMo方法,会将tstdata赋值给WinMo类的data1属性,将comdata赋值给WinMo类的data2属性。而在WinLoc类中,可以通过类名WinMo来访问WinMo类的data1和data2属性。