将数据库对象传递给子类QSqlTableMod

2024-10-02 22:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

不知道为什么我不能通过这个,但我正在尝试子类QSQLTableModel,我必须传递数据库到它…但我不确切地知道如何。你知道吗

class SclDataModel(QSqlTableModel):
    def __init__(self,parent=None):
        super(SclDataModel, self).__init__(parent)

class SclDataBrowse(QWidget):
    def __init__(self, parent=None):
        super(SclDataBrowse, self).__init__(parent)
        self.setup_db()
        self.setup_model()

    def setup_db(self):
        self.db = QSqlDatabase("QMYSQL")
        self.db.setHostName("myhost")
        self.db.setUserName("myuser")
        self.db.setPassword("mypassword")
        self.db.setDatabaseName("mydbname")
        self.db.open()

    def setup_model(self):
        self.model = SclDataModel(self,self.db)

在这里可以推一下。谢谢。你知道吗


Tags: selfnone数据库dbmodelinitdefsetup
1条回答
网友
1楼 · 发布于 2024-10-02 22:23:09

有许多解决方案:

  • 如果不想在构造函数中执行任何操作,则不要覆盖它,因此子类将使用父类的相同构造

如果不打算覆盖任何内容,可以使用pass

class SclDataModel(QSqlTableModel):
    pass

或者,如果要实现其他方法,则无需pass

class SclDataModel(QSqlTableModel):
    def other_method(self, some_args):
        # some code
  • 如果要在构造函数中执行某些操作,一个选项是使用same constructor作为父类

class SclDataModel(QSqlTableModel):
    def __init__(self, parent=None, db=QSqlDatabase()):
        super(SclDataModel, self).__init__(parent, db)
        # other code
  • 如果您不想担心使用*args**kwargs

class SclDataModel(QSqlTableModel):
    def __init__(self, *args, **kwargs):
        super(SclDataModel, self).__init__(*args, **kwargs)
        # other code

请理解继承用于自定义类,例如,继承类的构造函数无法与父类的构造函数匹配,例如:

class SclDataModel(QSqlTableModel):
    def __init__(self, arg1, arg2=v_default,parent=None, db=QSqlDatabase()):
        super(SclDataModel, self).__init__(parent, db)
        self._arg1 = arg1
        self._arg2 = arg2
        # other code

总之,构造函数的参数将取决于您的需要

相关问题 更多 >