对象属性的调用_PyQt5面向对象编程,类和类的继承
“前面的文章讲了新建一个面板的代码流程,但是它是面向过程的,这种编程思路繁琐且不易移植,而面向对象的编程思路就没有这些问题”
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面向对象编程,类和类的继承相关推荐
- 对象属性的调用_面向对象的三主线之一:Java类及类的成员(1)
01 属性 属性的赋值过程 ①默认初始化值 ②显式初始化 ②在代码块中赋值 ③构造器中初始化 ④通过"对象.方法"或"对象.属性"方法赋值 注:显式初始化和代码 ...
- Java面向对象编程篇1——类与对象
Java面向对象编程篇1--类与对象 1.面向过程 1.1.概念 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 1.2.优缺点 优点:性 ...
- python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...
Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...
- 【面向对象编程】(4) 类的继承,重构父类中的方法
各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...
- 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系
各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...
- c语言面向对象编程中的类_C ++中的面向对象编程
c语言面向对象编程中的类 Object oriented programming, OOP for short, aims to implement real world entities like ...
- System Verilog面向对象编程(OPP)基础——类(class)的基本使用
该文主要是笔者梳理绿皮书对应章节的内容 System Verilog面向对象编程OPP基础--类(class)的基本使用 面向对象编程 概述 考虑名词而非动词 编写第一个类class OOP术语 创建 ...
- C语言面向对象编程的类是指,c语言面向对象编程中的类_C ++中的面向对象编程...
c语言面向对象编程中的类 Object Oriented programming is a programming style that is associated with the concept ...
- python面向对象编程中_Python面向对象编程中关于类和方法
类和实例 python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句"物以类聚". 没错就是类, 归类 物以类聚 类 ...
最新文章
- linux 命令行 过滤,利用linux命令行工具进行文本行过滤
- Server-map
- Qt中创建excel文件
- LA3027简单带权并查集
- 模糊搜索时搜索结果中关键词变为不同颜色
- VTK:Filtering之GenericClip
- java \t怎么从头开始_通过这些简单的步骤从头开始学习Java
- python实现逐步回归分析_Python实现逐步回归(stepwise regression)
- Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有
- FTP 1 协议分析
- 电脑清理代码_网络安全宣传周丨电脑中病毒,这样处置!
- git拉取远程计算机上的代码 并 与本地进行比较(git fetch; git pull)
- 12.10 Nginx访问日志;12.11 Nginx日志切割;12.12 静态文件不记录日志和过期
- UWF自定义设置与命令管理
- android app消息推送,如何进行app消息推送(push)?
- Hadoop_day01_大数据的概念及磁盘存储
- 一文读懂智能对话系统
- CSS复合选择器,元素的显示模式,CSS背景设置
- 基于matab GUI的图形处理火焰检测系统
- 如何制作二维码?制作生成二维码的小妙招
热门文章
- Cisco对中国CCIE认证下重手了
- 前端开发-日常开发沉淀之生产环境与开发环境
- nginx后端节点健康检查
- 部署yum仓库自动挂载服务
- 《众妙之门——自由网站设计师成功之道》一1.4 自由网站设计师犯的严重错误...
- jQuery图片上传前先在本地预览(不经过后端处理)
- React技术栈——webpack
- 【产品环境】使用ELK搭建日志系统
- eclipse web项目 解决“Dynamic Web Module 3.0 requires J
- [Charset]UTF-8, UTF-16, UTF-16LE, UTF-16BE的区别