Python 3.x Python使用super()进行继承

Python 3.x Python使用super()进行继承,python-3.x,oop,inheritance,tkinter,super,Python 3.x,Oop,Inheritance,Tkinter,Super,假设我有两个文件,frontend.py用于显示GUI,backend.py用于数据库功能。我在使用super()继承数据库类时遇到问题。来自#frontend.py中managerPage类中的#backend2.py 我有一个错误: 框架=F(容器,自身) TypeError:init()缺少2个必需的位置参数:“cn”和“cur” 我相信这与tk.Frame类中的init有关,我也在managerPage类中继承了该类。我相信自助服务类(我为了自己的缘故而重新命名)是由user@Bryan

假设我有两个文件,frontend.py用于显示GUI,backend.py用于数据库功能。我在使用super()继承数据库类时遇到问题。来自#frontend.py中managerPage类中的#backend2.py

我有一个错误:

框架=F(容器,自身) TypeError:init()缺少2个必需的位置参数:“cn”和“cur”

我相信这与tk.Frame类中的init有关,我也在managerPage类中继承了该类。我相信自助服务类(我为了自己的缘故而重新命名)是由user@BryanOakley创建的。有人能帮我成功地使用super()吗

frontend.py。 后端2.py
继承不适用于在两个不同对象之间共享数据。您的
managerPage
不应继承您的数据库类。页面不能同时是页面和数据库。如果使用继承,则每个实例都将是数据库的单独实例

相反,您应该创建
数据库
类的单个实例,并将该实例传递给需要它的页面。或者在控制器上添加一个可以返回实例的方法

例如,您可以在控制器的
\uuuu init\uuu
中创建数据库实例:

class selfService(tk.Tk):

    def __init__(self, *args, **kwargs):
        ...
        self.db = Database()
        ...
然后,在任何引用控制器的代码中,您都可以使用
self.controller.db
访问数据库,如以下示例所示:

class managerPage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        ...
        print(self.controller.db)

(作为旁注,您不应该从
Tk
Toplevel
继承一个或另一个,但不能两者兼而有之)。

您使用继承的方式表明您不应该使用继承。您确定希望每个页面都有自己单独的数据库连接吗?Ie:如果你有3个页面,你将有3个不同的数据库连接。那是一个不同寻常的设计。谢谢但是在selfService中实例化db类时,我会遇到错误:return getattr(self.tk,attr)AttributeError:“\u tkinter.tkapp”对象没有属性“db”@grimReaperZ:正如我的第一个示例所示,您必须定义
self.db
class selfService(tk.Tk):

    def __init__(self, *args, **kwargs):
        ...
        self.db = Database()
        ...
class managerPage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        ...
        print(self.controller.db)