最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2024年10月28日 15:51:51   作者:王大興的王興  
面向?qū)ο缶幊蹋∣OP)是一種程序設(shè)計思想,以類和對象創(chuàng)建模型以描述真實世界,可使程序維護(hù)和擴(kuò)展更簡單,提高程序開發(fā)效率,面向?qū)ο蠛兔嫦蜻^程是兩種主要的編程思想,面向?qū)ο蟮某绦蛞詫ο笞鳛槌绦虻幕締卧?/div>

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

面向?qū)ο缶幊蹋∣bject Oriented Programming,簡稱OOP),是利用“類”和“對象”來創(chuàng)建各種模型來實現(xiàn)對真實世界的描述,使用面向?qū)ο缶幊痰脑虿粌H因為它可以使程序的維護(hù)和擴(kuò)展變得更簡單,并且可以大大提高程序開發(fā)效率。

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

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

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

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

面向過程(Procedure Oriented 簡稱PO),也是一種常見的程序設(shè)計思想,如c語言:

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

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

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

1、類的創(chuàng)建

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

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

類的幫助信息可以通過ClassName.__doc__查看。

下面寫一個動物類的案例:

class Animal():
    #這些都是類變量,在類中,方法外
    nicheng = "動物"
   
    #類中的方法參數(shù)中必須要有一個self,而且必須是在位置參數(shù)的第一位
    #實例(對象)變量,在變量前需要有一個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、類對象的創(chuàng)建及使用

A=className()

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

針對上文動物類的對象創(chuàng)建及使用:

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

=

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

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

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

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

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

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

#創(chuàng)建類的對象(實例化:由抽象到具體)
#如果你顯示地寫了帶參數(shù)的構(gòu)造方法,則不再允許使用默認(rèn)的無參數(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的使用

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

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

三大特性包括:

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

1、封裝

封裝是面向?qū)ο蟮奶卣髦?,是對象和類概念的主要特性?/p>

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

2、繼承

  • 面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實現(xiàn)這種重用的方法之一是通過繼承機(jī)制
  • 通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類

繼承語法是:

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

在python中繼承中的一些特點:

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

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

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

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

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

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

# class dog():
#     pass


# class bear():
#     pass


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

3、多態(tài)

只關(guān)心對象的實例方法是否同名,不關(guān)心對象所屬的類型;

對象所屬的類之間,繼承關(guān)系可有可無;

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

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

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等不同子類時,我們只需要接收Animal類型就可以了,因為Dog、Cat都是Animal類型,然后按照Animal類型進(jìn)行操作即可,由于Animal有run方法,因此傳入的任意類型,只要是Animal或其子類,就會自動調(diào)用實際類型的run方法

對于靜態(tài)語言(Java)來說,如果需要傳入Animal類型,則形參必須是Animal或其子類對象,否則無法調(diào)用run方法

對于動態(tài)語言(Python)來說,則不一定要傳入Animal類型,我們只需要保證傳入的對象包括run方法即可

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

總結(jié)

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

相關(guān)文章

  • Python center()函數(shù)使用方法詳解

    Python center()函數(shù)使用方法詳解

    在python中,center()返回一個原字符居中,并默認(rèn)使用空格填充至長度width返回新字符串,默認(rèn)填充字符為空格,本就將通過代碼示例給大家簡單的介紹一下Python center()函數(shù)是的使用方法,感興趣的同學(xué)跟著小編一起來看看吧
    2023-07-07
  • Python玩轉(zhuǎn)Excel的讀寫改實例

    Python玩轉(zhuǎn)Excel的讀寫改實例

    今天小編就為大家分享一篇關(guān)于Python玩轉(zhuǎn)Excel的讀寫改實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python創(chuàng)建屬于自己的單詞詞庫 便于背單詞

    python創(chuàng)建屬于自己的單詞詞庫 便于背單詞

    這篇文章主要為大家詳細(xì)介紹了python創(chuàng)建屬于自己的單詞詞庫,便于背單詞,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化

    詳解Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化

    這篇文章主要介紹了Django中views數(shù)據(jù)查詢使用locals()函數(shù)進(jìn)行優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python+turtle繪制七夕表白玫瑰花

    Python+turtle繪制七夕表白玫瑰花

    七夕節(jié),又稱“七巧節(jié)”“女兒節(jié)”“乞巧節(jié)”等,是中國民間的傳統(tǒng)節(jié)日。一年一度的七夕又快到了,用Python畫一朵玫瑰花送給你的那個TA吧
    2022-08-08
  • Python開發(fā)入門——迭代的基本使用

    Python開發(fā)入門——迭代的基本使用

    這篇文章主要介紹了Python 迭代的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python開發(fā),感興趣的朋友可以了解下
    2020-09-09
  • linux mint中搜狗輸入法導(dǎo)致pycharm卡死的問題

    linux mint中搜狗輸入法導(dǎo)致pycharm卡死的問題

    這篇文章主要介紹了linux mint中搜狗輸入法導(dǎo)致pycharm卡死的問題,這篇文章給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 通過python封裝SQLite3的示例代碼

    通過python封裝SQLite3的示例代碼

    這篇文章主要介紹了使用 Python 封裝 SQLite3 的相關(guān)內(nèi)容,包括創(chuàng)建數(shù)據(jù)庫實例、創(chuàng)建表、各種插入(單個、批量、字典等)、刪除(按條件、按 ID 等)、修改(多種方式)、查詢(單條、多條、分頁等)的示例及對應(yīng)的實現(xiàn)代碼,需要的朋友可以參考下
    2024-11-11
  • Python利用Nagios增加微信報警通知的功能

    Python利用Nagios增加微信報警通知的功能

    Nagios是一款開源的免費(fèi)網(wǎng)絡(luò)監(jiān)視工具,能有效監(jiān)控Windows、Linux和Unix的主機(jī)狀態(tài),交換機(jī)路由器等網(wǎng)絡(luò)設(shè)置,打印機(jī)等,本文給大家介紹Python利用Nagios增加微信報警通知的功能,需要的朋友參考下
    2016-02-02
  • Python調(diào)用DeepSeek API查詢ClickHouse的流程步驟

    Python調(diào)用DeepSeek API查詢ClickHouse的流程步驟

    本文介紹如何利用DeepSeek API和ClickHouse構(gòu)建自然語言查詢數(shù)據(jù)庫,文章詳細(xì)說明了環(huán)境配置步驟,包括Python安裝、必備庫安裝、DeepSeek API Key獲取和ClickHouse連接配置,需要的朋友可以參考下
    2026-03-03

最新評論

铜鼓县| 梅州市| 庆元县| 繁昌县| 普格县| 无极县| 台安县| 定远县| 来安县| 通许县| 阳西县| 大渡口区| 循化| 锡林浩特市| 淮南市| 会昌县| 大余县| 柳河县| 邢台市| 泾川县| 峨山| 边坝县| 咸阳市| 宜宾县| 罗田县| 仪征市| 新乐市| 铜川市| 芦溪县| 泰顺县| 东港市| 土默特右旗| 高青县| 巴林左旗| 台江县| 木兰县| 中西区| 晋中市| 西充县| 保亭| 大余县|