“前面的文章讲了新建一个面板的代码流程,但是它是面向过程的,这种编程思路繁琐且不易移植,而面向对象的编程思路就没有这些问题”

01面向对象编程

假设我们想制作几个面板,每个面板上有很多的控件,这是需求

按面向过程的思路,我们先制作一个面板,然后在面板上一个一个地添加控件,接着再制作第二个面板,再添加上面的控件。。。如果别人想制作其中的某个面板呢?他需要去全部的代码里找到想要的那部分,然后把它复制粘贴。。。

按面向对象的思路,我们把每个面板当成是一个对象,而对象是类的实例化,所以我们只需要创建对象的类,实现当对类进行实例化时,能够自动地把对象的所有属性和控件创建好,然后把这些类写入一个模块中(python脚本),当我想制作某个面板时,我只需要导入模块中相对应的类,然后对类进行实例化,创建对象,不就可以了嘛

由于QWidget是创建窗口的类,我们只需要定义一个类,继承自父类QWidget,就拿到了QWidget的所有属性和方法,同时又可以自定义自己的方法和属性

代码如下

from PyQt5.QtWidgets import *import sysclass Window(QWidget):    def __init__(self):        super().__init__() #调用父类的init方法        self.setWindowTitle("主面板") #面板属性        self.resize(500, 500) #面板属性        self.Setup_UI(); #面板上的控件都写在了这个方法内    def Setup_UI(self):        button = QPushButton(self)        button.resize(40, 40)        button.setText("按钮")        button.move(100, 100)        label = QLabel(self)        label.resize(40, 40)        label.setText("文本")        label.move(100, 200)if __name__ == "__main__":    app = QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())

02

类用关键字class定义,名称第一个字母大写,后面接中括号(),里面可以写入继承自哪个父类。如果没有父类,中括号也可以省略

类中可以定义方法和属性,其中__init__()方法是在创建类的对象时会自动执行的,方法后面的中括号()内定义需要传入的参数

C#区分静态类和非静态类,python没有静态类和非静态类之分

C#的类中有静态方法和非静态方法之分,用关键字static定义,而python中非静态方法传入的第一个参数是self,self表示类的实例化对象,表示只有对象能调用,调用时用:对象名.方法(参数1,参数2...);静态方法定义时传入的参数没有self,表示不能用类的对象调用,直接类名调用,同时需要在方法前一行加上关键字@staticmethod,来表示这是一个静态方法,通常用在工具类里

__init__()方法

init方法是在创建类的对象时会自动调用的,可以利用这个特点在创建对象时,自动实现想要的功能,比如说创建对象的属性或调用某些方法实现某些功能

class Animal():    def __init__(self, age, mile):        self.age = age #对象属性        self.Run(mile) #非静态方法调用:对象名.方法名(参数)    def Run(self, mile):        print("动物跑了%d米" % mile)animal = Animal(5, 10) #由于__init__()方法里传入参数age,所以在创建对象是也需要传入age的实参print("动物的年龄是%d岁" % animal.age)animal.Run(10)

如果init方法中传入了行参,那么实例化对象时由于会自动调用init方法,所以在创建类的对象时必须传入实参

静态方法

class Animal():    def __init__(self, age):        self.age = age #对象属性    @staticmethod    def Run(mile):        print("动物跑了%d米" % mile)Animal.Run(10)

用关键字@staticmethod表示,传入的形参中没有self,表示不能用类的对象调用,需要用类名调用03类的继承

类在定义时,如果有父类,可以定义继承的父类,子类默认继承父类的所有的方法和属性,但,如果子类里有同样的方法名和属性名,会优先调用自己的

子类如果没有init方法,可以继承父类的init方法

class Animal():    def __init__(self, age):        self.age = age #对象属性class Dog(Animal):    passdog = Dog(5)print(dog.age)

子类如果有init方法,不会再调用父类的init方法

class Animal():    def __init__(self, age):        self.age = ageclass Dog(Animal):    def __init__(self):        passdog = Dog()print(dog.age)

会发现报错了,dog对象没有age这个属性,说明创建dog对象时不会调用父类的init方法,也就不会有age这个属性

子类如果既想调用自己的init方法,又想调用父类的init方法

class Animal():    def __init__(self, age):        self.age = ageclass Dog(Animal):    def __init__(self, age):        super().__init__(age)dog = Dog(5)print(dog.age)

可以在子类的init方法里执行父类的init方法,super().__init__()

子类可以继承父类的属性

class Animal():    age = 5class Dog(Animal):    def __init__(self):        passdog = Dog()print(dog.age)

子类如果有相同的属性,只会调用自己的属性

class Animal():    age = 5class Dog(Animal):    age = 10dog = Dog()print(dog.age)

子类可以调用父类的方法

class Animal():    def Run(self, mile):        print("动物跑了%d米" % mile)class Dog(Animal):    passdog = Dog()dog.Run(10)

子类如果有相同的方法,只会调用自己的方法

class Animal():    def Run(self, mile):        print("动物跑了%d米" % mile)class Dog(Animal):    def Run(self, mile):        print("狗跑了%d米" % mile)dog = Dog()dog.Run(10)

所以,如果一个类调用方法或属性,优先在自己的类中调用,如果没有,才会去父类中调用,如果再没有,再去父类的父类,基类中调用

如果觉得文章不错,记得在下方 分享 收藏 点赞 在看 四连击

对象属性的调用_PyQt5面向对象编程,类和类的继承相关推荐

  1. 对象属性的调用_面向对象的三主线之一:Java类及类的成员(1)

    01 属性 属性的赋值过程 ①默认初始化值 ②显式初始化 ②在代码块中赋值 ③构造器中初始化 ④通过"对象.方法"或"对象.属性"方法赋值 注:显式初始化和代码 ...

  2. Java面向对象编程篇1——类与对象

    Java面向对象编程篇1--类与对象 1.面向过程 1.1.概念 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 1.2.优缺点 优点:性 ...

  3. python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...

    Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...

  4. 【面向对象编程】(4) 类的继承,重构父类中的方法

    各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...

  5. 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系

    各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...

  6. c语言面向对象编程中的类_C ++中的面向对象编程

    c语言面向对象编程中的类 Object oriented programming, OOP for short, aims to implement real world entities like ...

  7. System Verilog面向对象编程(OPP)基础——类(class)的基本使用

    该文主要是笔者梳理绿皮书对应章节的内容 System Verilog面向对象编程OPP基础--类(class)的基本使用 面向对象编程 概述 考虑名词而非动词 编写第一个类class OOP术语 创建 ...

  8. C语言面向对象编程的类是指,c语言面向对象编程中的类_C ++中的面向对象编程...

    c语言面向对象编程中的类 Object Oriented programming is a programming style that is associated with the concept ...

  9. python面向对象编程中_Python面向对象编程中关于类和方法

    类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...

最新文章

  1. linux 命令行 过滤,利用linux命令行工具进行文本行过滤
  2. Server-map
  3. Qt中创建excel文件
  4. LA3027简单带权并查集
  5. 模糊搜索时搜索结果中关键词变为不同颜色
  6. VTK:Filtering之GenericClip
  7. java \t怎么从头开始_通过这些简单的步骤从头开始学习Java
  8. python实现逐步回归分析_Python实现逐步回归(stepwise regression)
  9. Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有
  10. FTP 1 协议分析
  11. 电脑清理代码_网络安全宣传周丨电脑中病毒,这样处置!
  12. git拉取远程计算机上的代码 并 与本地进行比较(git fetch; git pull)
  13. 12.10 Nginx访问日志;12.11 Nginx日志切割;12.12 静态文件不记录日志和过期
  14. UWF自定义设置与命令管理
  15. android app消息推送,如何进行app消息推送(push)?
  16. Hadoop_day01_大数据的概念及磁盘存储
  17. 一文读懂智能对话系统
  18. CSS复合选择器,元素的显示模式,CSS背景设置
  19. 基于matab GUI的图形处理火焰检测系统
  20. 如何制作二维码?制作生成二维码的小妙招

热门文章

  1. Cisco对中国CCIE认证下重手了
  2. 前端开发-日常开发沉淀之生产环境与开发环境
  3. nginx后端节点健康检查
  4. 部署yum仓库自动挂载服务
  5. 《众妙之门——自由网站设计师成功之道》一1.4 自由网站设计师犯的严重错误...
  6. jQuery图片上传前先在本地预览(不经过后端处理)
  7. React技术栈——webpack
  8. 【产品环境】使用ELK搭建日志系统
  9. eclipse web项目 解决“Dynamic Web Module 3.0 requires J
  10. [Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别