Python基礎——類與對象

目錄

一、兩種編程思維

二、類

1.類中可以放函數和變量

 (1)用法

 (2)類方法與函數的區別

2.類方法和類屬性可以組合

3.類的相關

(1)給類方法傳參

(2)增加/修改類屬性


一、兩種編程思維

1.面向過程編程,看重的是解決問題的過程。

   面向過程編程,主要用到的是“函數”知識,將每個過程步驟打包成函數,再依次調用。

2.面向對象編程主要用到的是“類和對象”知識。

3.例:現在接到的一個需求是:做一道西紅柿炒雞蛋。

面向過程的做法:自己按照炒菜的步驟親手製作一道西紅柿炒雞蛋。

面向對象的做法:製作一臺炒菜機器人,然後告訴機器人做一道西紅柿炒雞蛋。

二、類

    【類】是一個函數包。類中可以放置函數和變量,然後類中的函數可以很方便的使用類中的變量。

1.類中可以放函數和變量

 (1)用法

    用def語句來自定義一個函數,我們用class語句來自定義一個類。

    在類中被定義的函數被稱爲類的【方法】,描述的是這個類能做什麼。我們使用類名.函數名()的格式,就可以讓類的方法運行起來。

    在類中被定義的變量被稱爲類的【屬性】。使用類名.變量名的格式,可以把類中的屬性的值提取出來。

# 語法:創建一個名爲“ClassName”的類,類名一般首字母要大寫,(): 不能丟   
class ClassName():
# 如定義一個名爲'狗'的類,可以寫成class Dog():
    # 規範:class語句後續的代碼塊要縮進  
    def function1():
    # 定義類中的函數1

例1: 

class 智能機器人():
    胸圍 = 33
    腰圍 = 44
    臀圍 = 55
    def 打招呼():
        print('主人你好!')
    def 賣萌():
        print('主人,求抱抱!')
    def 生氣():
        print('主人,我要報警了!')

print('把類的屬性打印出來:')
print(智能機器人.胸圍)
print(智能機器人.腰圍)
print(智能機器人.腰圍)

智能機器人.打招呼()
智能機器人.賣萌()
智能機器人.生氣()

 (2)類方法與函數的區別

    一個是它的調用格式:類.函數名()函數名()多了一個【類.】,但更重要的是,“類”中的函數可以利用“類”中的變量(也就是類方法可以調用類屬性)。具體體現在第2節。

2.類方法和類屬性可以組合

    爲了把類中的變量傳遞給類中的函數,我們需要用到3個特定格式:

① 第一個格式@classmethod的中文意思就是“類方法”,@classmethod聲明瞭函數1是類方法,這樣才能允許函數1使用類屬性中的數據。

② 第二個格式cls的意思是class的縮寫。如果類方法函數1想使用類屬性(也就是類中的變量),就要寫上cls函數1的第一個參數,也就是把這個類作爲參數傳給自己,這樣就能被允許使用類中的數據。 

③ 第三個格式是cls.變量。類方法想使用類屬性的時候,需要在這些變量名稱前加上cls.

另外,當類中的函數【不需要】用到類中的變量時,就不要用@classmethodclscls.三處格式,否則就是佔着茅坑不拉屎,終端也會給你報錯。

'''【正確案例】'''

class 類A():
    變量1 = 100
    變量2 = 200
    
    def 函數1():  # 【不需要】使用類屬性
        print('我不需要使用類屬性。')
    
    @classmethod
    def 函數2(cls):  # 【需要】使用類屬性
        print(cls.變量1)
        print(cls.變量2)

類A.函數1()
類A.函數2()

三.類的相關

1.給類方法傳參

(1)類方法僅使用外部參數

一首詩 = ['《卜算子》','我住長江頭,','君住長江尾。','日日思君不見君,','共飲長江水。']

class 唸詩類():
    def 唸詩函數(參數):
        for i in 參數:
            print(i)

唸詩類.唸詩函數(一首詩)

 

(2)類方法僅使用內部參數

class 唸詩類():
    一首詩 = ['《卜算子》','我住長江頭,','君住長江尾。','日日思君不見君,','共飲長江水。']
    
    @classmethod
    def 唸詩函數(cls):
        for i in cls.一首詩:
            print(i)

唸詩類.唸詩函數()

(3)類方法同時使用內部參數和外部參數

class 唸詩類():
    一首詩 = ['《卜算子》','我住長江頭,','君住長江尾。','日日思君不見君,','共飲長江水。']
    
    @classmethod
    def 唸詩函數(cls,參數1):
        print('念給%s的詩:'%參數1)
        for i in cls.一首詩:
            print(i)
參數1 = input('唸詩給誰聽?') 
唸詩類.唸詩函數('張三')

當類方法要使用多個外部參數時,我們要多預設幾個參數位置。比如: 

class 加100類():
    變量 = 100
    
    @classmethod
    def 加100函數(cls,參數1,參數2,參數3):
        總和 = cls.變量 + 參數1 + 參數2 + 參數3
        print('加100函數計算結果如下:')
        print(總和)

參數1 = int(input('請輸入一個整數:'))
參數2 = int(input('請輸入一個整數:'))
參數3 = int(input('請輸入一個整數:'))

加100類.加100函數(參數1,參數2,參數3)

 2.增加/修改類屬性

有兩種途徑來增加或修改類屬性。一種是從內部,用類方法去增加/修改;另一種是從外部,用類.變量 = xx直接增加/修改類屬性。

(1)從外部增加/修改屬性

class 幸運():
    @classmethod
    def 好運翻倍(cls):
        print('好的,我把它存了起來,然後翻了888倍還給你:' + str(cls.幸運數*888))
        # 或者這樣寫也可以:
        # print('好的,我把它存了起來,然後翻了888倍還給你:%d' % (cls.幸運數*888))

幸運.幸運數 = int(input('你的幸運數是多少?請輸入一個整數。'))
幸運.好運翻倍()

(2)從內部增加/修改屬性

class 唸詩類():
    一首詩 = ['《卜算子》','我住長江頭,','君住長江尾。','日日思君不見君,','共飲長江水。']
    
    @classmethod
    def 唸詩函數(cls):
        cls.接收人 = input('請輸入你想給誰唸詩:')
        print('念給'+ cls.接收人 +'的詩:')
        for i in cls.一首詩:
            print(i)

唸詩類.唸詩函數()

3.案例

類方法不但能調用類屬性,還能直接調用其他類方法。

class 成績單():
    @classmethod
    def 錄入成績單(cls):
        cls.學生姓名 = input('請輸入學生姓名:')
        cls.語文_成績 = int(input('請輸入語文成績:'))
        cls.數學_成績 = int(input('請輸入數學成績:'))

    @classmethod
    def 計算平均分(cls):
        平均分 = (cls.語文_成績 + cls.數學_成績)/2
        return 平均分

    @classmethod
    def 評級(cls):
        平均分 = cls.計算平均分()
        if 平均分>=90:
            print(cls.學生姓名 + '的評級是:優')
        elif 平均分>= 80 and 平均分<90 :
            print(cls.學生姓名 + '的評級是:良')
        elif 平均分>= 60 and 平均分<80 :
            print(cls.學生姓名 + '的評級是:中')
        else:
            print(cls.學生姓名 + '的評級是:差')

成績單.錄入成績單()
成績單.評級()

def 評級(cls)中有一句cls.計算平均分(),這句代碼可以調用類方法計算平均分(),在這個類方法中,用return語句保存了平均分,然後賦值給def 評級(cls)中的變量平均分。這裏有個小點要注意,def 評級(cls)中的平均分def 計算平均分(cls)平均分,是兩個不同的變量,因爲它們在不同的函數下工作,作用域不同。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章