面向對象編程
炒菜機器人.作菜('西紅柿炒雞蛋')
複製代碼
就像咱們能夠用
def
語句來自定義一個函數,咱們用class
語句來自定義一個類。
# 語法:建立一個名爲「ClassName」的類,類名通常首字母要大寫,(): 不能丟
class ClassName():
# 如定義一個名爲'狗'的類,能夠寫成class Dog():
# 規範:class語句後續的代碼塊要縮進
def function1():
# 定義類中的函數1
複製代碼
class 類A():
def 函數1():
print('報道!我是類A的第一個方法!')
def 函數2():
print('報道!我是類A的第二個方法!')
def 函數3():
print('報道!我是類A的第三個方法!')
複製代碼
咱們使用
類名.函數名()
的格式,就可讓類的方法運行起來
class 類A():
def 函數1():
print('報道!我是類A的第一個方法!')
def 函數2():
print('報道!我是類A的第二個方法!')
def 函數3():
print('報道!我是類A的第三個方法!')
類A.函數1()
類A.函數2()
類A.函數3()
複製代碼
類裏面, 也能夠加變量...
class 類A():
變量1 = 100
變量2 = -5.83
變量3 = 'abc'
複製代碼
使用
類名.變量名
的格式,能夠把類中的屬性的值提取出來
class 類A():
變量1 = 100
變量2 = -5.83
變量3 = 'abc'
# 這裏須要用print語句,才能把提取出的數值打印到屏幕上
print(類A.變量1)
print(類A.變量2)
print(類A.變量3)
複製代碼
變量能夠輸出, 也能夠賦值
我有一個智能機器人...
class 智能機器人():
胸圍 = 33
腰圍 = 44
臀圍 = 55
# 以上爲類屬性
def 打招呼():
print('主人你好!')
def 賣萌():
print('主人,求抱抱!')
def 生氣():
print('主人,我要報警了!')
複製代碼
添加智商200, 添加奔跑, 輸出('我快樂的奔跑 奔跑 ...... 哎喲喂! 撞牆了. ')
class 智能機器人():
胸圍 = 33
腰圍 = 44
臀圍 = 55
智商 = 200
# 以上爲類屬性
def 打招呼():
print('主人你好!')
def 賣萌():
print('主人,求抱抱!')
def 生氣():
print('主人,我要報警了!')
def 奔跑():
print('我快樂的奔跑, 奔跑 ... 哎喲喂, 撞牆了...')
智能機器人.奔跑()
複製代碼
方法和函數的區別
類.函數名()
比函數名()
多了一個【類.】,但更重要的是,「類」中的函數能夠利用「類」中的變量(也就是類方法能夠調用類屬性)。
猜猜代碼是幹嗎的?
class 類A():
變量1 = 100
變量2 = 200
@classmethod
def 函數1(cls):
print(cls.變量1)
print(cls.變量2)
類A.函數1()
複製代碼
讓機器人自爆三維
給類方法傳參
對於函數, 參數僅供內部使用...
def 加100函數(參數):
總和 = 參數 + 100
print('計算結果以下:')
print(總和)
參數 = 1
加100函數(參數)
複製代碼
改爲面向對象...
# 請直接運行並體驗代碼效果
class 加100類():
def 加100函數(參數):
總和 = 參數 + 100
print('計算結果以下:')
print(總和)
參數 = 1
加100類.加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) # 不用顯示的傳入
複製代碼
增長/修改類屬性
有兩種途徑來增長或修改類屬性。
一種是從內部,用
類方法
去增長/修改;另外一種是從外部,用
類.變量 = xx
直接增長/修改類屬性。
class 類A():
pass
類A.變量1 = 100
print(類A.變量1)
複製代碼
試分析結果
變量1 = 15
#這是類外部的變量1
變量2 = 'abc'
class 類A():
變量1 = 100
#這是類屬性變量1
變量1 = 類A.變量1
類A.變量2 = 變量2
print(類A.變量1)
print(類A.變量2)
複製代碼
試說出代碼的結果
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)
唸詩類.唸詩函數()
複製代碼
實操: 保存學生成績
class 成績單():
@classmethod
def 錄入成績單(cls):
cls.學生姓名 = input('請輸入學生姓名:')
cls.語文_成績 = int(input('請輸入語文成績:'))
成績單.錄入成績單()
print(成績單.學生姓名 + '的成績單以下:')
print('語文成績:'+ str(成績單.語文_成績))
複製代碼
class 成績單():
@classmethod
def 錄入成績單(cls):
cls.學生姓名 = input('請輸入學生姓名:')
cls.語文_成績 = int(input('請輸入語文成績:'))
@classmethod
def 打印成績單(cls):
print(cls.學生姓名 + '的成績單以下:')
print('語文成績:'+ str(cls.語文_成績))
成績單.錄入成績單()
成績單.打印成績單()
複製代碼
增長一行數學成績
class 成績單():
@classmethod
def 錄入成績單(cls):
cls.學生姓名 = input('請輸入學生姓名:')
cls.語文_成績 = int(input('請輸入語文成績:'))
cls.數學_成績 = int(input('請輸入數學成績:'))
@classmethod
def 打印成績單(cls):
print(cls.學生姓名 + '的成績單以下:')
print('語文成績:'+ str(cls.語文_成績))
print('數學成績:'+ str(cls.數學_成績))
成績單.錄入成績單()
複製代碼
還想打印平均分
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(平均分))
成績單.錄入成績單()
成績單.打印成績單()
成績單.打印平均分()
複製代碼
我還想多一個評級
@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.學生姓名 + '的評級是:差')
成績單.錄入成績單()
成績單.評級()
複製代碼
小練習
爲類calendar添加兩個方法:一個刪除完成項,一個添加新增項。
因爲日程安排是事情和時間的配對,因此咱們用字典來存放:
{'給父母買禮物':'9:00', '學習':'10:00', '和朋友聚會':'18:30'}
接下來,須要你新建兩個類方法,從而實現字典中的數據增減。
複製代碼
須要的效果:
貓哥教你寫爬蟲 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