Python - 如何将方法移动到其他模块

python - how to move methods to other module

提问人:JaHe 提问时间:6/15/2023 最后编辑:MatthiasJaHe 更新时间:6/15/2023 访问量:41

问:

在使用 Cobol 和其他过程语言开发了 40 年后,我开始对 OOP 感到有些困惑。 我的主应用程序已经包含大量代码,因此我想逐步将一些实用程序方法移动到另一个模块。 这是该操作的一个小示例。 到目前为止,使它具有预期结果的唯一方法是使用对象“objmod”。 这看起来不是很正统。 有没有更方便的方法?

主应用*****************************************************

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
import sys
import module1
import sqlite3

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My App")
        self.button = QPushButton("Insert data from work01 into work02")
        self.button.clicked.connect(self.envoi)

        self.setCentralWidget(self.button)

    def envoi(self): 
        mod1 = module1.clmod1             #<<<< USING THE MODULE 'module1'
        mod1.insert(self)

    ############## WE HAVE MOVED ##################
    """def cleanWork02(self):
        self.connecter()
        self.cur.execute('''DELETE FROM Work02''')"""
    ###############################################

    def execute(self, sql):
        self.connecter()
        self.cur.execute(sql)
        self.conexion.commit()

    def connecter(self):
        self.db = 'C:\TestPyth\Base.db'
        self.conexion = sqlite3.connect(self.db)
        self.cur = self.conexion.cursor()
        self.conexion.commit()

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec()

模块****************************************************

import sqlite3

class clmod1:

    def insert(self):
        objmod = clmod1
        objmod.cleanWork02(self)
        sql = '''INSERT INTO Work02 (field1,field2,field3)
                SELECT Work01.field1,Work01.field2,Work01.field3
                FROM Work01'''
        self.execute(sql)

    def cleanWork02(self):
        sql = '''DELETE FROM Work02'''
        self.execute(sql)```

***********************************************************************************************
inside the 'insert method' if I use 'self.cleanWork02()' instead of 'objmod.cleanWork02(self)',
it says "AttributeError: 'MainWindow' object has no attribute 'cleanWork02'
Python 对象 方法 模块 self

评论


答: 暂无答案