欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python的class類(lèi)調(diào)用方式和封裝思想

 更新時(shí)間:2024年10月28日 15:51:51   作者:王大興的王興  
面向?qū)ο缶幊蹋∣OP)是一種程序設(shè)計(jì)思想,以類(lèi)和對(duì)象創(chuàng)建模型以描述真實(shí)世界,可使程序維護(hù)和擴(kuò)展更簡(jiǎn)單,提高程序開(kāi)發(fā)效率,面向?qū)ο蠛兔嫦蜻^(guò)程是兩種主要的編程思想,面向?qū)ο蟮某绦蛞詫?duì)象作為程序的基本單元

一、面向?qū)ο笏枷?/h2>

面向?qū)ο缶幊蹋∣bject Oriented Programming,簡(jiǎn)稱OOP),是利用“類(lèi)”和“對(duì)象”來(lái)創(chuàng)建各種模型來(lái)實(shí)現(xiàn)對(duì)真實(shí)世界的描述,使用面向?qū)ο缶幊痰脑虿粌H因?yàn)樗梢允钩绦虻木S護(hù)和擴(kuò)展變得更簡(jiǎn)單,并且可以大大提高程序開(kāi)發(fā)效率。

另外,基于面向?qū)ο蟮某绦蚩梢允顾烁尤菀桌斫饽愕拇a邏輯,從而使團(tuán)隊(duì)開(kāi)發(fā)變得更從容。

1、面向?qū)ο蠛兔嫦蜻^(guò)程

面向?qū)ο螅∣bject Oriented,簡(jiǎn)稱OO),是一種程序設(shè)計(jì)思想,如python和java語(yǔ)言就是一種面向?qū)ο蟮木幊陶Z(yǔ)言:

  • OOP把對(duì)象作為程序的基本單元,一個(gè)對(duì)象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。
  • OOP把程序看做不同對(duì)象的相互調(diào)用
  • OOP的抽象程度比函數(shù)要高

面向過(guò)程(Procedure Oriented 簡(jiǎn)稱PO),也是一種常見(jiàn)的程序設(shè)計(jì)思想,如c語(yǔ)言:

  • 面向過(guò)程的程序設(shè)計(jì)的核心是過(guò)程(流水線式思維),過(guò)程即解決問(wèn)題的步驟,面向過(guò)程的設(shè)計(jì)就好比精心設(shè)計(jì)好一條流水線,考慮周全什么時(shí)候處理什么東西。
  • 面向過(guò)程編程是把函數(shù)看著程序的最基本單元,一個(gè)函數(shù)包括要處理的數(shù)據(jù)及算法邏輯
  • 面向過(guò)程編程是把程序看作不同函數(shù)之間的互相調(diào)用
  • 面向過(guò)程編程的抽象層度相對(duì)較低
  • 優(yōu)點(diǎn)是:極大的降低了寫(xiě)程序的復(fù)雜度,只需要順著要執(zhí)行的步驟,堆疊代碼即可。
  • 缺點(diǎn)是:一套流水線或者流程就是用來(lái)解決一個(gè)問(wèn)題,代碼牽一發(fā)而動(dòng)全身。

2、面向?qū)ο蟮某R?jiàn)概念

  • 類(lèi)(Class): 用來(lái)描述具有相同的屬性和方法的對(duì)象的集合。它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法,對(duì)象是類(lèi)的實(shí)例。
  • 類(lèi)變量:類(lèi)變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類(lèi)變量定義在類(lèi)中且在函數(shù)體之外。類(lèi)變量通常不作為實(shí)例變量使用。
  • 數(shù)據(jù)成員:類(lèi)變量或者實(shí)例變量, 用于處理類(lèi)及其實(shí)例對(duì)象的相關(guān)的數(shù)據(jù)。
  • 方法重寫(xiě):如果從父類(lèi)繼承的方法不能滿足子類(lèi)的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(override),也稱為方法的重寫(xiě)。
  • 局部變量:定義在方法中的變量,只作用于當(dāng)前實(shí)例的類(lèi)。
  • 實(shí)例變量:在類(lèi)的聲明中,屬性是用變量來(lái)表示的。這種變量就稱為實(shí)例變量,是在類(lèi)聲明的內(nèi)部但是在類(lèi)的其他成員方法之外聲明的。
  • 實(shí)例化:創(chuàng)建一個(gè)類(lèi)的實(shí)例,類(lèi)的具體對(duì)象。
  • 方法:類(lèi)中定義的函數(shù)。
  • 對(duì)象:通過(guò)類(lèi)定義的數(shù)據(jù)結(jié)構(gòu)實(shí)例。對(duì)象包括兩個(gè)數(shù)據(jù)成員(類(lèi)變量和實(shí)例變量)和方法。

二、類(lèi)的創(chuàng)建及調(diào)用

1、類(lèi)的創(chuàng)建

使用 class 關(guān)鍵字來(lái)創(chuàng)建一個(gè)新類(lèi),class 之后為類(lèi)的名稱()并以冒號(hào)結(jié)尾:

class ClassName():
   '''類(lèi)的幫助信息'''
   類(lèi)體,包括類(lèi)的變量和方法

類(lèi)的幫助信息可以通過(guò)ClassName.__doc__查看。

下面寫(xiě)一個(gè)動(dòng)物類(lèi)的案例:

class Animal():
    #這些都是類(lèi)變量,在類(lèi)中,方法外
    nicheng = "動(dòng)物"
   
    #類(lèi)中的方法參數(shù)中必須要有一個(gè)self,而且必須是在位置參數(shù)的第一位
    #實(shí)例(對(duì)象)變量,在變量前需要有一個(gè)self.
    def info(self):
        self.age = 0
        self.gender = "male"
        self.weight = 0
        self.brand = "xxx"        

    def eat(self):
        print("站著吃")
    
    def sleep(self):
        print("趴著睡")

2、類(lèi)對(duì)象的創(chuàng)建及使用

A=className()

  • 類(lèi)對(duì)象支持兩種操作:屬性引用和方法引用
  • 標(biāo)準(zhǔn)語(yǔ)法:obj.name

針對(duì)上文動(dòng)物類(lèi)的對(duì)象創(chuàng)建及使用:

# 創(chuàng)建對(duì)象pig,及使用對(duì)象的變量和方法
pig = Animal()
cat = Animal() print(pig.age)
print(cat.age)
cat.sleep()
cat.info()
print(Animal.nichen)

=

3、構(gòu)造方法的使用

  • 構(gòu)造方法可以實(shí)現(xiàn)對(duì)實(shí)例變量的初始化操作
  • __init__的特殊方法(構(gòu)造方法),在類(lèi)實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用
  • __init__方法可以有參數(shù),參數(shù)通過(guò) __init__傳遞到類(lèi)的實(shí)例化操作上
  • 可以不顯示地寫(xiě)__init__方法,會(huì)默認(rèn)使用無(wú)參數(shù)的構(gòu)造方法
  • 如果顯示地寫(xiě)了構(gòu)造方法,則不能再使用無(wú)參數(shù)的構(gòu)造方法
class studentInit():
    #聲明類(lèi)變量
    type1 = '學(xué)生'

    #通過(guò)構(gòu)造方法實(shí)現(xiàn)對(duì)實(shí)例變量的初始化
    def __init__(self,age,name,ID):
        #定義并對(duì)實(shí)例變量進(jìn)行初始化
        self.age = age
        self.name = name
        self.ID = ID

    #定義第一個(gè)方法info,實(shí)現(xiàn)對(duì)實(shí)例變量的初始化
    def  info(self):#顯示對(duì)象屬性的方法
        print("年齡是%d、姓名是%s、學(xué)號(hào)是%s"%(self.age,self.name,self.ID))

    def study(self):
        score=80
        self.ID = "0000000"
        print("學(xué)生%s的學(xué)習(xí)成績(jī)是:%d"%(self.ID,score))

    def play(self):
        print("學(xué)習(xí)之余需要玩會(huì)游戲!")

#創(chuàng)建類(lèi)的對(duì)象(實(shí)例化:由抽象到具體)
#如果你顯示地寫(xiě)了帶參數(shù)的構(gòu)造方法,則不再允許使用默認(rèn)的無(wú)參數(shù)的構(gòu)造方法
# TypeError: __init__() missing 3 required positional arguments: 'age', 'name', and 'ID'
xiaohua = studentInit(20,"xiaohua","12345678")
print(xiaohua.type1)
print(xiaohua.age)
xiaohua.play()
xiaohua.study()

4、self的使用

  • 類(lèi)的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱, 按照慣例它的名稱是 self。
  • self不是關(guān)鍵字,你可以把它改成其他名稱,雖然代碼能正常運(yùn)行,但是還是會(huì)提示:Method should have “self” as first argument
  • 一般我們也不會(huì)這么干,因?yàn)槟銓?xiě)了,別人都不一定知道是啥意思,大家都已經(jīng)形成習(xí)慣了
  • self 代表的是類(lèi)的實(shí)例,代表當(dāng)前對(duì)象的地址,而 self.class 則指向類(lèi)

三、面向?qū)ο蟮娜筇匦?/h2>

三大特性包括:

  • 封裝
  • 繼承
  • 多態(tài)

1、封裝

封裝是面向?qū)ο蟮奶卣髦?,是?duì)象和類(lèi)概念的主要特性。

封裝也就是把客觀事物封裝成抽象的類(lèi),并且類(lèi)可以把自己的數(shù)據(jù)和方法只讓可信的類(lèi)或者對(duì)象操作,對(duì)不可信的進(jìn)行信息隱藏

2、繼承

  • 面向?qū)ο蟮木幊處?lái)的主要好處之一是代碼的重用,實(shí)現(xiàn)這種重用的方法之一是通過(guò)繼承機(jī)制
  • 通過(guò)繼承創(chuàng)建的新類(lèi)稱為子類(lèi)或派生類(lèi),被繼承的類(lèi)稱為基類(lèi)、父類(lèi)或超類(lèi)

繼承語(yǔ)法是:

class 派生類(lèi)名(基類(lèi)名):
    類(lèi)的代碼
    ...

在python中繼承中的一些特點(diǎn):

  • 如果在子類(lèi)中需要父類(lèi)的構(gòu)造方法就需要顯式的調(diào)用父類(lèi)的構(gòu)造方法,或者不重寫(xiě)父類(lèi)的構(gòu)造方法。
  • 在調(diào)用基類(lèi)的方法時(shí),需要加上基類(lèi)的類(lèi)名前綴,且需要帶上 self 參數(shù)變量。
  • python中類(lèi)的繼承分為:?jiǎn)卫^承和多繼承
#引入繼承的理念:提取不同類(lèi)中共有的屬性和行為:年齡、性別、顏色、吃魚(yú)、睡、玩
#把提取的屬性和行為定義到一個(gè)動(dòng)物類(lèi)中:

#引入繼承的理念:提取不同類(lèi)中共有的屬性和行為:年齡、性別、顏色、吃魚(yú)、睡、玩
#把提取的屬性和行為定義到一個(gè)動(dòng)物類(lèi)中:
class animal():#父類(lèi)
    def __init__(self,age,sex,color):
        self.age = age
        self.sex = sex
        self.color = color

    def eat(self):
        print("吃飯")

    def sleep(self):
        print("睡覺(jué)")

    def play(self):
        print("玩")   

#可以使用繼承的方式來(lái)寫(xiě)子類(lèi)
class cat(animal):#子類(lèi)
    #重寫(xiě):前提是必須有繼承關(guān)系,父類(lèi)的行為再子類(lèi)中不一定全部通用
    #子類(lèi)有自己的特性,那就把父類(lèi)的行為重寫(xiě)一下
    #方法名保持一致,參數(shù)無(wú)所謂
    def eat(self,food):
        print("貓吃魚(yú)")

# class dog():
#     pass


# class bear():
#     pass


#創(chuàng)建一只小貓
c = cat(1,"male","yellow")
print(c.color)
c.eat("魚(yú)")
c.play()
class baba():
    def property(self,car,house,money):
        self.car="10輛蝙蝠戰(zhàn)車(chē)"
        self.house="5座大別墅"
        self.money="一百億"#調(diào)用父類(lèi)的方法
    def smalltroble(self):
        print("100個(gè)wife")
    def largetroble(self):
        print("500個(gè)兒子和1000個(gè)1over")
class son(baba):
    def property(self,car1,house1,money1):
        baba.car=car1
        baba.house=house1
        baba.money=money1
        print("1輛蝙蝠戰(zhàn)車(chē)","2座大別墅","30億")   #可換值繼承上面父類(lèi)的構(gòu)造
    def smalltroble(self):#調(diào)用子類(lèi)方法
        print("10個(gè)wife")
    def largetroble(self):#調(diào)用子類(lèi)方法
        print("50個(gè)兒子和10個(gè)1over")
c=son() 
c.property("a","2","3")#參數(shù)格式必須一樣,參數(shù)可以不一樣
c.largetroble()
c.smalltroble()

3、多態(tài)

只關(guān)心對(duì)象的實(shí)例方法是否同名,不關(guān)心對(duì)象所屬的類(lèi)型;

對(duì)象所屬的類(lèi)之間,繼承關(guān)系可有可無(wú);

多態(tài)的好處可以增加代碼的外部調(diào)用靈活度,讓代碼更加通用,兼容性比較強(qiáng);

多態(tài)是調(diào)用方法的技巧,不會(huì)影響到類(lèi)的內(nèi)部設(shè)計(jì)。

class Animal():
    def run(self):
        print("Animal Running ……")

class Cat(Animal):
    def run(self):
        print("Cat Running ……")

class Dog(Animal):
    def run(self):
        print("Dog Running ……")

def runTwice(animal):
     animal.run()

a = Animal()
c = Cat()
d = Dog()
runTwice(a)
runTwice(c)
runTwice(d)

===運(yùn)行結(jié)果:======
Animal Running ……
Cat Running ……
Dog Running ……

鴨子多態(tài):

當(dāng)我們需要傳入Dog、Cat等不同子類(lèi)時(shí),我們只需要接收Animal類(lèi)型就可以了,因?yàn)镈og、Cat都是Animal類(lèi)型,然后按照Animal類(lèi)型進(jìn)行操作即可,由于Animal有run方法,因此傳入的任意類(lèi)型,只要是Animal或其子類(lèi),就會(huì)自動(dòng)調(diào)用實(shí)際類(lèi)型的run方法

對(duì)于靜態(tài)語(yǔ)言(Java)來(lái)說(shuō),如果需要傳入Animal類(lèi)型,則形參必須是Animal或其子類(lèi)對(duì)象,否則無(wú)法調(diào)用run方法

對(duì)于動(dòng)態(tài)語(yǔ)言(Python)來(lái)說(shuō),則不一定要傳入Animal類(lèi)型,我們只需要保證傳入的對(duì)象包括run方法即可

這就是動(dòng)態(tài)語(yǔ)言的“鴨子類(lèi)型”,他并不要求嚴(yán)格的繼承體系,一個(gè)對(duì)象只要“看起來(lái)像鴨子,走起路來(lái)像鴨子,那他就可以被看做是鴨子!”

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于python的bottle框架跨域請(qǐng)求報(bào)錯(cuò)問(wèn)題的處理方法

    關(guān)于python的bottle框架跨域請(qǐng)求報(bào)錯(cuò)問(wèn)題的處理方法

    這篇文章主要介紹了關(guān)于python的bottle框架跨域請(qǐng)求報(bào)錯(cuò)問(wèn)題的處理方法,需要的朋友可以參考下
    2017-03-03
  • Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法

    Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法

    今天小編就為大家分享一篇Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 基于OpenCV python3實(shí)現(xiàn)證件照換背景的方法

    基于OpenCV python3實(shí)現(xiàn)證件照換背景的方法

    這篇文章主要介紹了基于OpenCV python3實(shí)現(xiàn)證件照換背景的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • PyInstaller如何打包依賴文件至目標(biāo)程序目錄

    PyInstaller如何打包依賴文件至目標(biāo)程序目錄

    這篇文章主要介紹了PyInstaller如何打包依賴文件至目標(biāo)程序目錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python pyecharts Line折線圖的具體實(shí)現(xiàn)

    Python pyecharts Line折線圖的具體實(shí)現(xiàn)

    折線圖在很多圖標(biāo)中都有使用,本文主要介紹了Python pyecharts Line折線圖的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 10個(gè)Python常用的損失函數(shù)及代碼實(shí)現(xiàn)分享

    10個(gè)Python常用的損失函數(shù)及代碼實(shí)現(xiàn)分享

    損失函數(shù)是一種衡量模型與數(shù)據(jù)吻合程度的算法。損失函數(shù)測(cè)量實(shí)際測(cè)量值和預(yù)測(cè)值之間差距的一種方式。本文為大家總結(jié)了10個(gè)常用的損失函數(shù)及Python代碼實(shí)現(xiàn),需要的可以參考一下
    2022-09-09
  • Python使用add_subplot與subplot畫(huà)子圖操作示例

    Python使用add_subplot與subplot畫(huà)子圖操作示例

    這篇文章主要介紹了Python使用add_subplot與subplot畫(huà)子圖操作,涉及Python使用matplotlib模塊進(jìn)行圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • python超時(shí)重新請(qǐng)求解決方案

    python超時(shí)重新請(qǐng)求解決方案

    這篇文章主要介紹了python超時(shí)重新請(qǐng)求解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python學(xué)習(xí)之MRO方法搜索順序

    Python學(xué)習(xí)之MRO方法搜索順序

    這篇文章主要介紹了Python MRO方法搜索順序,文中代碼和圖片解釋的非常詳細(xì),可以很好的帶大家學(xué)習(xí)相關(guān)知識(shí)內(nèi)容,感興趣的小伙伴可以參考一下這篇文章
    2021-09-09
  • Python中獲取圖片的大小問(wèn)題

    Python中獲取圖片的大小問(wèn)題

    這篇文章主要介紹了Python中獲取圖片的大小問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論