对象属性的调用_PyQt5面向对象编程,类和类的继承
“前面的文章講了新建一個(gè)面板的代碼流程,但是它是面向過程的,這種編程思路繁瑣且不易移植,而面向?qū)ο蟮木幊趟悸肪蜎]有這些問題”
01面向?qū)ο缶幊?/strong>假設(shè)我們想制作幾個(gè)面板,每個(gè)面板上有很多的控件,這是需求
按面向過程的思路,我們先制作一個(gè)面板,然后在面板上一個(gè)一個(gè)地添加控件,接著再制作第二個(gè)面板,再添加上面的控件。。。如果別人想制作其中的某個(gè)面板呢?他需要去全部的代碼里找到想要的那部分,然后把它復(fù)制粘貼。。。
按面向?qū)ο蟮乃悸?#xff0c;我們把每個(gè)面板當(dāng)成是一個(gè)對(duì)象,而對(duì)象是類的實(shí)例化,所以我們只需要?jiǎng)?chuàng)建對(duì)象的類,實(shí)現(xiàn)當(dāng)對(duì)類進(jìn)行實(shí)例化時(shí),能夠自動(dòng)地把對(duì)象的所有屬性和控件創(chuàng)建好,然后把這些類寫入一個(gè)模塊中(python腳本),當(dāng)我想制作某個(gè)面板時(shí),我只需要導(dǎo)入模塊中相對(duì)應(yīng)的類,然后對(duì)類進(jìn)行實(shí)例化,創(chuàng)建對(duì)象,不就可以了嘛
由于QWidget是創(chuàng)建窗口的類,我們只需要定義一個(gè)類,繼承自父類QWidget,就拿到了QWidget的所有屬性和方法,同時(shí)又可以自定義自己的方法和屬性
代碼如下
from PyQt5.QtWidgets import *import sysclass Window(QWidget): def __init__(self): super().__init__() #調(diào)用父類的init方法 self.setWindowTitle("主面板") #面板屬性 self.resize(500, 500) #面板屬性 self.Setup_UI(); #面板上的控件都寫在了這個(gè)方法內(nèi) 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類類用關(guān)鍵字class定義,名稱第一個(gè)字母大寫,后面接中括號(hào)(),里面可以寫入繼承自哪個(gè)父類。如果沒有父類,中括號(hào)也可以省略
類中可以定義方法和屬性,其中__init__()方法是在創(chuàng)建類的對(duì)象時(shí)會(huì)自動(dòng)執(zhí)行的,方法后面的中括號(hào)()內(nèi)定義需要傳入的參數(shù)
C#區(qū)分靜態(tài)類和非靜態(tài)類,python沒有靜態(tài)類和非靜態(tài)類之分
C#的類中有靜態(tài)方法和非靜態(tài)方法之分,用關(guān)鍵字static定義,而python中非靜態(tài)方法傳入的第一個(gè)參數(shù)是self,self表示類的實(shí)例化對(duì)象,表示只有對(duì)象能調(diào)用,調(diào)用時(shí)用:對(duì)象名.方法(參數(shù)1,參數(shù)2...);靜態(tài)方法定義時(shí)傳入的參數(shù)沒有self,表示不能用類的對(duì)象調(diào)用,直接類名調(diào)用,同時(shí)需要在方法前一行加上關(guān)鍵字@staticmethod,來(lái)表示這是一個(gè)靜態(tài)方法,通常用在工具類里
__init__()方法init方法是在創(chuàng)建類的對(duì)象時(shí)會(huì)自動(dòng)調(diào)用的,可以利用這個(gè)特點(diǎn)在創(chuàng)建對(duì)象時(shí),自動(dòng)實(shí)現(xiàn)想要的功能,比如說(shuō)創(chuàng)建對(duì)象的屬性或調(diào)用某些方法實(shí)現(xiàn)某些功能
class Animal(): def __init__(self, age, mile):????????self.age?=?age?#對(duì)象屬性 self.Run(mile) #非靜態(tài)方法調(diào)用:對(duì)象名.方法名(參數(shù)) def Run(self, mile): print("動(dòng)物跑了%d米" % mile)animal = Animal(5, 10) #由于__init__()方法里傳入?yún)?shù)age,所以在創(chuàng)建對(duì)象是也需要傳入age的實(shí)參print("動(dòng)物的年齡是%d歲" % animal.age)animal.Run(10)如果init方法中傳入了行參,那么實(shí)例化對(duì)象時(shí)由于會(huì)自動(dòng)調(diào)用init方法,所以在創(chuàng)建類的對(duì)象時(shí)必須傳入實(shí)參
靜態(tài)方法
class Animal(): def __init__(self, age):????????self.age?=?age?#對(duì)象屬性 @staticmethod def Run(mile): print("動(dòng)物跑了%d米" % mile)Animal.Run(10)用關(guān)鍵字@staticmethod表示,傳入的形參中沒有self,表示不能用類的對(duì)象調(diào)用,需要用類名調(diào)用03類的繼承類在定義時(shí),如果有父類,可以定義繼承的父類,子類默認(rèn)繼承父類的所有的方法和屬性,但,如果子類里有同樣的方法名和屬性名,會(huì)優(yōu)先調(diào)用自己的
子類如果沒有init方法,可以繼承父類的init方法class Animal(): def __init__(self, age): self.age = age #對(duì)象屬性class Dog(Animal): passdog = Dog(5)print(dog.age)子類如果有init方法,不會(huì)再調(diào)用父類的init方法class Animal(): def __init__(self, age): self.age = ageclass Dog(Animal): def __init__(self): passdog = Dog()print(dog.age)會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了,dog對(duì)象沒有age這個(gè)屬性,說(shuō)明創(chuàng)建dog對(duì)象時(shí)不會(huì)調(diào)用父類的init方法,也就不會(huì)有age這個(gè)屬性
子類如果既想調(diào)用自己的init方法,又想調(diào)用父類的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方法里執(zhí)行父類的init方法,super().__init__()
子類可以繼承父類的屬性class Animal(): age = 5class Dog(Animal): def __init__(self): passdog = Dog()print(dog.age)子類如果有相同的屬性,只會(huì)調(diào)用自己的屬性
class Animal(): age = 5class Dog(Animal): age = 10dog = Dog()print(dog.age)子類可以調(diào)用父類的方法
class Animal(): def Run(self, mile): print("動(dòng)物跑了%d米" % mile)class Dog(Animal): passdog = Dog()dog.Run(10)子類如果有相同的方法,只會(huì)調(diào)用自己的方法
class Animal(): def Run(self, mile): print("動(dòng)物跑了%d米" % mile)class Dog(Animal): def Run(self, mile): print("狗跑了%d米" % mile)dog = Dog()dog.Run(10)所以,如果一個(gè)類調(diào)用方法或?qū)傩?#xff0c;優(yōu)先在自己的類中調(diào)用,如果沒有,才會(huì)去父類中調(diào)用,如果再?zèng)]有,再去父類的父類,基類中調(diào)用
如果覺得文章不錯(cuò),記得在下方 分享 收藏 點(diǎn)贊 在看 四連擊
總結(jié)
以上是生活随笔為你收集整理的对象属性的调用_PyQt5面向对象编程,类和类的继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字符串删除首尾_[LeetCode] 4
- 下一篇: hαbits的意思_hαppy什么么意思