貓哥教你寫爬蟲 020--類與對象(上)

面向對象編程

1558661778912
1558661464160
1558662693995
1558662699136
1558663098644

炒菜機器人.作菜('西紅柿炒雞蛋')
複製代碼

1558663123902
1558663292866
1558663357007

就像咱們能夠用def語句來自定義一個函數,咱們用class語句來自定義一個類。

# 語法:建立一個名爲「ClassName」的類,類名通常首字母要大寫,(): 不能丟 
class ClassName():
# 如定義一個名爲'狗'的類,能夠寫成class Dog():
    # 規範:class語句後續的代碼塊要縮進 
    def function1():
    # 定義類中的函數1
複製代碼
classA():
    def 函數1():
        print('報道!我是類A的第一個方法!')
    def 函數2():
        print('報道!我是類A的第二個方法!')
    def 函數3():
        print('報道!我是類A的第三個方法!')
複製代碼

咱們使用類名.函數名()的格式,就可讓類的方法運行起來

classA():
    def 函數1():
        print('報道!我是類A的第一個方法!')
    def 函數2():
        print('報道!我是類A的第二個方法!')
    def 函數3():
        print('報道!我是類A的第三個方法!')
類A.函數1()
類A.函數2()
類A.函數3()
複製代碼

類裏面, 也能夠加變量...

classA():
    變量1 = 100
    變量2 = -5.83
    變量3 = 'abc'
複製代碼

使用類名.變量名的格式,能夠把類中的屬性的值提取出來

classA():
    變量1 = 100
    變量2 = -5.83
    變量3 = 'abc'
# 這裏須要用print語句,才能把提取出的數值打印到屏幕上
print(類A.變量1)
print(類A.變量2)
print(類A.變量3)
複製代碼

變量能夠輸出, 也能夠賦值

1558663573611

我有一個智能機器人...

class 智能機器人():
    胸圍 = 33
    腰圍 = 44
    臀圍 = 55
    # 以上爲類屬性
    def 打招呼():
        print('主人你好!')
    def 賣萌():
        print('主人,求抱抱!')
    def 生氣():
        print('主人,我要報警了!')
複製代碼

添加智商200, 添加奔跑, 輸出('我快樂的奔跑 奔跑 ...... 哎喲喂! 撞牆了. ')

class 智能機器人():
    胸圍 = 33
    腰圍 = 44
    臀圍 = 55
    智商 = 200
    # 以上爲類屬性
    def 打招呼():
        print('主人你好!')
    def 賣萌():
        print('主人,求抱抱!')
    def 生氣():
        print('主人,我要報警了!')
    def 奔跑():
        print('我快樂的奔跑, 奔跑 ... 哎喲喂, 撞牆了...')
智能機器人.奔跑()
複製代碼

1558666392668

方法和函數的區別

類.函數名()函數名()多了一個【類.】,

但更重要的是,「類」中的函數能夠利用「類」中的變量(也就是類方法能夠調用類屬性)。

1558666450186
1558666471408

猜猜代碼是幹嗎的?

classA():
    變量1 = 100
    變量2 = 200
 @classmethod
    def 函數1(cls):
        print(cls.變量1)
        print(cls.變量2)
類A.函數1()
複製代碼

1558666725061
1558666911887

讓機器人自爆三維

1558667265911

給類方法傳參

對於函數, 參數僅供內部使用...

def 加100函數(參數):
    總和 = 參數 + 100
    print('計算結果以下:')
    print(總和)
參數 = 1100函數(參數)
複製代碼

改爲面向對象...

# 請直接運行並體驗代碼效果
class 加100類():
    def 加100函數(參數):
        總和 = 參數 + 100
        print('計算結果以下:')
        print(總和)
參數 = 1100類.加100函數(參數)
複製代碼

面向過程轉面向對象

一首詩 = ['《卜算子》','我住長江頭,','君住長江尾。','日日思君不見君,','共飲長江水。']
def 唸詩函數(參數):
    for i in 參數:
        print(i)
唸詩函數(一首詩)
複製代碼

外部傳參

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

內部傳參

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

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

class 加100類():
    變量 = 100
 @classmethod
    def 加100函數(cls, 參數):
        總和 = cls.變量 + 參數
        print('加100函數計算結果以下:')
        print(總和)
參數 = int(input('請輸入一個整數:'))
加100類.加100函數(參數)
複製代碼
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) # 不用顯示的傳入
複製代碼

1558668149201

增長/修改類屬性

有兩種途徑來增長或修改類屬性。

一種是從內部,用類方法去增長/修改;

另外一種是從外部,用類.變量 = xx直接增長/修改類屬性。

1558668263581

classA():
    pass
類A.變量1 = 100
print(類A.變量1)
複製代碼

1558668371448

試分析結果

變量1 = 15
#這是類外部的變量1
變量2 = 'abc'
classA():
    變量1 = 100
    #這是類屬性變量1
變量1 = 類A.變量1
類A.變量2 = 變量2
print(類A.變量1)
print(類A.變量2)
複製代碼

1558668445089

試說出代碼的結果

class():
 @classmethod
    def 打印類屬性(cls):
        print(cls.變量)
類.變量 = input('請輸入字符串:')
類.打印類屬性()
複製代碼

從外部接收一個變量, 保存爲類屬性

你的幸運數是多少?請輸入一個整數。(用戶輸入:66)
好的,我把它存了起來,而後翻了888倍還給你:58608
複製代碼
class 幸運():
 @classmethod
    def 好運翻倍(cls):
        print('好的,我把它存了起來,而後翻了888倍還給你:' + str(cls.幸運數*888))
        # 或者這樣寫也能夠:
        # print('好的,我把它存了起來,而後翻了888倍還給你:%d' % (cls.幸運數*888))
幸運.幸運數 = int(input('你的幸運數是多少?請輸入一個整數。'))
幸運.好運翻倍()
複製代碼

類的內部增長/修改類屬性。

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

想要的效果

請輸入你想給誰唸詩:(用戶輸入「張三」)
念給張三的詩:
《卜算子》
我住長江頭,
君住長江尾。
日日思君不見君,
共飲長江水。
複製代碼

代碼以下

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

1558678956776

實操: 保存學生成績

class 成績單():
 @classmethod
    def 錄入成績單(cls):
        cls.學生姓名 = input('請輸入學生姓名:')
        cls.語文_成績 = int(input('請輸入語文成績:'))
成績單.錄入成績單()
print(成績單.學生姓名 + '的成績單以下:')
print('語文成績:'+ str(成績單.語文_成績))
複製代碼

1558679053675

class 成績單():
 @classmethod
    def 錄入成績單(cls):
        cls.學生姓名 = input('請輸入學生姓名:')
        cls.語文_成績 = int(input('請輸入語文成績:'))
 @classmethod
    def 打印成績單(cls):
        print(cls.學生姓名 + '的成績單以下:')
        print('語文成績:'+ str(cls.語文_成績))
成績單.錄入成績單()
成績單.打印成績單()
複製代碼

增長一行數學成績

1558679128914

class 成績單():
 @classmethod
    def 錄入成績單(cls):
        cls.學生姓名 = input('請輸入學生姓名:')
        cls.語文_成績 = int(input('請輸入語文成績:'))
        cls.數學_成績 = int(input('請輸入數學成績:'))
 @classmethod
    def 打印成績單(cls):
        print(cls.學生姓名 + '的成績單以下:')
        print('語文成績:'+ str(cls.語文_成績))
        print('數學成績:'+ str(cls.數學_成績))
成績單.錄入成績單()
複製代碼

還想打印平均分

1558679152710

class 成績單():
 @classmethod
    def 錄入成績單(cls):
        cls.學生姓名 = input('請輸入學生姓名:')
        cls.語文_成績 = int(input('請輸入語文成績:'))
        cls.數學_成績 = int(input('請輸入數學成績:'))
 @classmethod
    def 打印成績單(cls):
        print(cls.學生姓名 + '的成績單以下:')
        print('語文成績:'+ str(cls.語文_成績))
        print('數學成績:'+ str(cls.數學_成績))
 @classmethod
    def 打印平均分(cls):
        平均分 = (cls.語文_成績 + cls.數學_成績)/2
        print(cls.學生姓名 + '的平均分是:' + str(平均分))
成績單.錄入成績單()
成績單.打印成績單()
成績單.打印平均分()
複製代碼

我還想多一個評級

1558679198929
1558679214284

 @classmethod
    def 評級(cls):
        平均分 = (cls.語文_成績 + cls.數學_成績)/2
        if 平均分>=90:
            print(cls.學生姓名 + '的評級是:優')
        elif 平均分>= 80 and 平均分<90 :
            print(cls.學生姓名 + '的評級是:良')
        elif 平均分>= 60 and 平均分<80 :
            print(cls.學生姓名 + '的評級是:中')
        else:
            print(cls.學生姓名 + '的評級是:差')
成績單.錄入成績單()
複製代碼

方法嵌套(同一個類之中, 方法互調)

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.學生姓名 + '的評級是:差')
成績單.錄入成績單()
成績單.評級()
複製代碼

1558679338025

小練習

爲類calendar添加兩個方法:一個刪除完成項,一個添加新增項。
因爲日程安排是事情和時間的配對,因此咱們用字典來存放:
{'給父母買禮物':'9:00', '學習':'10:00', '和朋友聚會':'18:30'}
接下來,須要你新建兩個類方法,從而實現字典中的數據增減。
複製代碼

須要的效果:

1558680284745

快速跳轉:

貓哥教你寫爬蟲 000--開篇.md
貓哥教你寫爬蟲 001--print()函數和變量.md
貓哥教你寫爬蟲 002--做業-打印皮卡丘.md
貓哥教你寫爬蟲 003--數據類型轉換.md
貓哥教你寫爬蟲 004--數據類型轉換-小練習.md
貓哥教你寫爬蟲 005--數據類型轉換-小做業.md
貓哥教你寫爬蟲 006--條件判斷和條件嵌套.md
貓哥教你寫爬蟲 007--條件判斷和條件嵌套-小做業.md
貓哥教你寫爬蟲 008--input()函數.md
貓哥教你寫爬蟲 009--input()函數-人工智能小愛同窗.md
貓哥教你寫爬蟲 010--列表,字典,循環.md
貓哥教你寫爬蟲 011--列表,字典,循環-小做業.md
貓哥教你寫爬蟲 012--布爾值和四種語句.md
貓哥教你寫爬蟲 013--布爾值和四種語句-小做業.md
貓哥教你寫爬蟲 014--pk小遊戲.md
貓哥教你寫爬蟲 015--pk小遊戲(全新改版).md
貓哥教你寫爬蟲 016--函數.md
貓哥教你寫爬蟲 017--函數-小做業.md
貓哥教你寫爬蟲 018--debug.md
貓哥教你寫爬蟲 019--debug-做業.md
貓哥教你寫爬蟲 020--類與對象(上).md
貓哥教你寫爬蟲 021--類與對象(上)-做業.md
貓哥教你寫爬蟲 022--類與對象(下).md
貓哥教你寫爬蟲 023--類與對象(下)-做業.md
貓哥教你寫爬蟲 024--編碼&&解碼.md
貓哥教你寫爬蟲 025--編碼&&解碼-小做業.md
貓哥教你寫爬蟲 026--模塊.md
貓哥教你寫爬蟲 027--模塊介紹.md
貓哥教你寫爬蟲 028--模塊介紹-小做業-廣告牌.md
貓哥教你寫爬蟲 029--爬蟲初探-requests.md
貓哥教你寫爬蟲 030--爬蟲初探-requests-做業.md
貓哥教你寫爬蟲 031--爬蟲基礎-html.md
貓哥教你寫爬蟲 032--爬蟲初體驗-BeautifulSoup.md
貓哥教你寫爬蟲 033--爬蟲初體驗-BeautifulSoup-做業.md
貓哥教你寫爬蟲 034--爬蟲-BeautifulSoup實踐.md
貓哥教你寫爬蟲 035--爬蟲-BeautifulSoup實踐-做業-電影top250.md
貓哥教你寫爬蟲 036--爬蟲-BeautifulSoup實踐-做業-電影top250-做業解析.md
貓哥教你寫爬蟲 037--爬蟲-寶寶要聽歌.md
貓哥教你寫爬蟲 038--帶參數請求.md
貓哥教你寫爬蟲 039--存儲數據.md
貓哥教你寫爬蟲 040--存儲數據-做業.md
貓哥教你寫爬蟲 041--模擬登陸-cookie.md
貓哥教你寫爬蟲 042--session的用法.md
貓哥教你寫爬蟲 043--模擬瀏覽器.md
貓哥教你寫爬蟲 044--模擬瀏覽器-做業.md
貓哥教你寫爬蟲 045--協程.md
貓哥教你寫爬蟲 046--協程-實踐-吃什麼不會胖.md
貓哥教你寫爬蟲 047--scrapy框架.md
貓哥教你寫爬蟲 048--爬蟲和反爬蟲.md
貓哥教你寫爬蟲 049--完結撒花.mdhtml

相關文章
相關標籤/搜索