首页 > 其他分享 >Pyside6多继承的坑(继承QWidget)

Pyside6多继承的坑(继承QWidget)

时间:2023-10-07 15:55:34浏览次数:29  
标签:__ .__ textEdit 继承 FrameBase self Pyside6 init QWidget

python中支持多继承,并且可以针对不同父类传入不同的参数进行初始化:

class A:
    def __init__(self, text):
        print(text)

class B:
    def __init__(self, text):
        print(text)
        pass

class C(B, A):
    def __init__(self):
        B.__init__(self, "Hello")
        A.__init__(self, "World")
===========================================
Hello
World

但是当我继承的父类中包含QWidget时则会出现参数缺失的问题。
具体情景是,我通过Designer设计了一个窗口,这个窗口会被复用,并且不同实例还会进行一些改变。所以我写了一个类叫做FrameBase,这个类中实现了不同实例相同相同操作的部分,但是需要传入一个QTextEdit作为操作对象。
然后写了一个Instance类继承QWidgetFrameBase,按照上面的例子应该写成如下即可:

class FrameBase(Ui_Form):
  def __init__(self, textEdit: QTextEdit):
    self.tgtEdit = textEdit
  ...

class Instance(QWdiget, FrameBase):
  def __init__(self, textEdit: QTextEdit):
    QWidget.__init__(self)
    FrameBase.__init__(self, textEdit)
  ...

但是上述这么写会报错:TypeError: FrameBase.__init__() missing 1 required positional argument: 'textEdit'
如果把参数删除,写成如下:

class FrameBase(Ui_Form):
  def __init__(self):
    pass
  ...

class Instance(QWdiget, FrameBase):
  def __init__(self, textEdit: QTextEdit):
    QWidget.__init__(self)
    FrameBase.__init__(self)

这样是不会报错的,所以类名.__init__()的写法按道理应该可以。但实际就是不行,不知道为什么,有大佬知道评论区求告诉!


后面通过另一种写法实现了:

class FrameBase(Ui_Form):
  def __init__(self, textEdit: QTextEdit):
    self.tgtEdit = textEdit
  ...

class Instance(QWdiget, FrameBase):
  def __init__(self, textEdit: QTextEdit):
    super().__init__(textEdit=textEdit)
  ...

使用super().__init__()的方式代替,这也是Qt论坛中大佬推荐的写法。

标签:__,.__,textEdit,继承,FrameBase,self,Pyside6,init,QWidget
From: https://www.cnblogs.com/Fortunater/p/17746515.html

相关文章

  • 面向对象的三个基本特征:封装、继承、多态
    封装在面向对象编程中,封装是一种将数据和相关操作封装在一个单元内部的概念。它通过将数据和方法组合在一个类中,隐藏了内部实现的细节,只暴露了必要的接口给外部使用。封装的目的是保护数据的完整性和安全性,同时提供一个清晰的接口供其他对象进行交互。通过封装,我们可以实现数据......
  • Java---继承
    继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。需要注意的是,子类无法继承父类私有的对象和方法生活中的继承 ......
  • python练习2 | 类的继承
    点击查看代码#类继承练习:人力系统#员工分为两类,全职员工FullTimeEmployee、兼职员工PartTimeEmployee#全职和兼职都有”姓名,name,工号:id属性#都具备打印信息print_info(打印姓名、工号)方法#全职有月薪monthly_salary属性#兼职有日薪daily_salary属性,每月工作天数......
  • 为什么在es6中继承必须调用super函数?
    在ES6中规定,子类的构造函数必须要执行super函数图片查阅自阮一峰ES6教程super()函数有什么作用?在执行super函数时,其实就是在创建子类的this,然后将父类的实例和方法放置在这个this对象中,子类在调用super之前是没有this的,所有的this操作都要在super()关键字后执行......
  • 202309301820_《Spring boot项目,继承mybatis-generator遇到的问题及解决》
     当配置到最后,双击右侧maventab,准备生成时,报红:1.“Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.ThedriverisautomaticallyregisteredviatheSPIandmanualloadingofthedriverclassisgen......
  • web前端tips:js继承——寄生式继承
    上篇文章给大家分享了js继承中的原型式继承web前端tips:js继承——原型式继承今天给大家分享一下js继承中的寄生式继承寄生式继承寄生式继承(ParasiticInheritance)是一种基于原型式的继承方式,它通过创建一个仅用于封装继承过程的函数,该函数在内部调用原型式继承创建......
  • 【从0学习Solidity】13. 继承
    【从0学习Solidity】13.继承博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!本文收录于不写代码没......
  • 浅谈一下原型继承中我对原型链的理解
    在学习JS语法中,我知道了任何一个类都拥有一个原型对象prototype,这个内置对象的好处在于不用每次new对象时都为对象开辟一个内存空间指向函数,可以使所有实例化对象共享一个属性。但是在JS中的继承却和其他语言有些差异。今天学习了原型继承之后,先给大家看一下基本的代码。 首......
  • JavaSE day01【复习回顾面向对象基础、继承、抽象类】测评
    选择题题目1(单选):下列关于Java中类与类之间的关系描述正确的是()选项:​ A.Java中类与类属于多继承,还可以多层继承​ B.Java中类与类属于实现关系,可以单实现也可以多实现​ C.Java中类与类属于实现关系,可以只能单实现​ D.Java中类与类属于单继承,......
  • 类和继承
    类今日份学习类的继承,Object类和Object类中的三个重要方法(getClass()方法,toString()方法,equals()方法)。类的继承   继承使整个程序架构具有一定的弹性,它不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性。    在JAVA语言中,一个类继承另一个类需要使用关键字ex......