?本章是面對(duì)對(duì)象的編程范式。
1、輕松看對(duì)象
“模擬”正是面向?qū)ο缶幊痰暮诵摹?/p>
類和對(duì)象提高了程序的可復(fù)用性,加強(qiáng)了程序模擬真實(shí)世界的能力。
????1)類
類需要定義,隸屬類的有其屬性和方法屬性
class Bird(object):????????????????????# class來定義名字為Bird的類,object為最基礎(chǔ)的類
????reproduction = 'egg'?????????? ? # 類的屬性
????def chirp (self,sound):? ? ? ? ? # 類的方法屬性(定義函數(shù))
????????????????????????????????????????????????參數(shù)self:是為了在方法內(nèi)部引用對(duì)象自身,調(diào)用時(shí)不需要傳入
????????print(sound)
????2)對(duì)象
通過調(diào)用類,可以創(chuàng)造類下面的一個(gè)對(duì)象并引用屬性
對(duì)象名 = 類名()——可以創(chuàng)造對(duì)象
對(duì)象.屬性——可以引用屬性
對(duì)象.方法屬性()——可以引用方法屬性
除了共性的類屬性外,我們還需要用于說明個(gè)性的對(duì)象屬性
def set_color(self, color):
????self.color = color ????????????????# self參數(shù):操作對(duì)象屬性
_init_()——可以初始化對(duì)象屬性
def _init_(self, color):? ? ? ? ? ? ? ? ? ?#對(duì)象被建立會(huì)自動(dòng)調(diào)用
????self.color = color
self參數(shù)還有其他作用
def chirp(self, sound):
????print(sound)
def chirp_repeat(self, sound, n):
????for i in range(n):
????self.chirp(sound)???????????????? #self參數(shù):方法內(nèi)部調(diào)用同一類的其他方法
2、繼承者們
? ??1)子類
子類可以繼承父類的基本屬性,且有自己的屬性
class Chicken(Bird)? ? ? ? ? ? ?#這里Bird時(shí)父類,Chicken是子類
? ? how_to_move = 'walk'? ? #子類的屬性
? ? 2)屬性覆蓋
在子類的用相同的方法屬性可以覆蓋父類的
super——可以調(diào)用父類被覆蓋的方法屬性
3、那些年,錯(cuò)過的對(duì)象
? ? 1)列表對(duì)象
dir()——查詢一個(gè)類或?qū)ο蟮乃袑傩?/p>
help()——查詢類或函數(shù)的說明文檔
pass——啥都不做,保持程序結(jié)構(gòu)的完整性
列表的方法調(diào)用:
a = [1, 1, 1, 9, True, False]
type(a)? ? ? ? ? ? ? ? ? ? ? ? #查詢a的類別
dir(a)? ? ? ? ? ? ? ? ? ? ? ? ? ?# 查詢一個(gè)類或者對(duì)象的所有屬性
help(a)? ? ? ? ? ? ? ? ? ? ? ? # 查詢函數(shù)或類的說明文檔
a.count(1)? ? ? ? ? ? ? ? ? ?# 計(jì)數(shù)a中元素1的個(gè)數(shù)(其中Ture默認(rèn)值是1,F(xiàn)alse默認(rèn)值是0)
a.index(9)? ? ????????????? ?# 查詢?cè)?第一次出現(xiàn)的下標(biāo)
a.append(6)? ? ? ? ? ? ? ? # 列表最后添加元素6
a.sort()????????????????????????# 排序
a.reverse()? ? ? ? ? ? ? ? ? # 顛倒次序
a.pop()????????????????????????# 去除最后一個(gè)元素,并將該元素返回
a.remove(9)? ? ? ? ? ? ? ? # 去除第一次出現(xiàn)的元素9
a.insert(0, 9)? ? ? ? ? ? ? ?# 從下標(biāo)為0位置插入9
a.clear()? ? ? ? ? ? ? ? ? ? ? # 清空列表
? ? 2)元組和字符串對(duì)象
元組只能進(jìn)行查詢操作,字符串是特殊的元組
str = 'a你好鴨A'
sub = '你'
sub2 = ('說', '子')
str.count(sub)????????????# 返回:sub在str中出現(xiàn)的次數(shù)
str.find(sub)? ? ? ? ? ? ? ?# 返回:從左開始 查找sub在str中第一次出現(xiàn)的位置 如果str中不包含sub 返回-1
str.index(sub)????????????# 返回:從左開始 查找sub在str中第一次出現(xiàn)的位置 如果str中不包含sub 舉出錯(cuò)誤
str.rfind(sub)? ? ? ? ? ? ? # 返回:從右開始 查找sub在str中第一次出現(xiàn)的位置 如果str中不包含sub 返回-1
str.rindex(sub)? ? ? ? ? ?# 返回:從右開始 查找sub在str中第一次出現(xiàn)的位置 如果str中不包含sub 舉出錯(cuò)誤
str.isalnum()? ? ? ? ? ? ? # 返回:True 如果所有的字符都是字母或數(shù)字
str.isalpha()? ? ? ? ? ? ? ?# 返回:True 如果所有的字符都是字母
str.isdigit()? ? ? ? ? ? ? ? ?# 返回:True 如果所有的字符都是數(shù)字
str.istitle()? ? ? ? ? ? ? ? ? # 返回:True 如果所有的詞的首字母都是大寫
str.isspace()? ? ? ? ? ? ? # 返回:True 如果所有的字符都是空格
str.islower()? ? ? ? ? ? ? ?# 返回:True 如果所有的字符都是小寫字母
str.isupper()? ? ? ? ? ? ? # 返回:True 如果所有的字符都是大寫字母
str.split('好', 1)? ? ? ? ? # 返回:從左開始 以空格為分隔符(separator) 將str分割為多個(gè)子字符串 總共分割max次將所得的子字符串放在一個(gè)表中返回 可以以str.split(",")的方式使用其他分隔符
str.join(sub2)????????????# 返回:將sub2中的元素 以str為分隔符 合并成為一個(gè)字符串
str.strip('a')????????????????# 返回:去掉字符串開頭和結(jié)尾的空格 也可以提供參數(shù)sub 去掉位于字符串開頭和結(jié)尾的sub
str.replace(sub, '2')? ?# 返回:用一個(gè)新的字符串2替換str中的sub
str.capitalize()? ? ? ? ? ?# 返回:將str第一個(gè)字母大寫
str.lower()? ? ? ? ? ? ? ? ?# 返回:將str全部字母改為小寫
str.upper()????????????????# 返回:將str全部字母改為大寫
str.swapcase()? ? ? ? ?# 返回:將str大寫字母改為小寫 小寫字母改為大寫
str.title()????????????????????# 返回:將str的每個(gè)詞(以空格分隔)的首字母大寫
str.center(10)????????????# 返回:長(zhǎng)度為10的字符串 將原字符串放入該字符串中心 其他空余位置為空格
str.ljust(10)????????????????# 返回:長(zhǎng)度為10的字符串 將原字符串左對(duì)齊放入該字符串 其他空余位置為空格
str.rjust(10)????????????????# 返回:長(zhǎng)度為10的字符串 將原字符串右對(duì)齊放入該字符串 其他空余位置為空格
? ? 3)詞典對(duì)象
詞典同樣是一個(gè)類
example_dict = {'a':1,'b':2}
for k in example_dict.keys():????????#循環(huán)遍歷每個(gè)元素的鍵
for v in example_dict.values():? ? ?#循環(huán)遍歷每個(gè)元素的值
for k,v in example_dict.items():????#循環(huán)遍歷每個(gè)元素
example_dict.clear()? ? ? ? ? ? ? ? ? ? ?#清空字典內(nèi)元素
4、意想不到的對(duì)象
? ? 1)循環(huán)對(duì)象
循環(huán)對(duì)象把要使用的元素在循環(huán)過程中逐漸生產(chǎn),節(jié)省空間提高效率
iter()——將一個(gè)列表轉(zhuǎn)變?yōu)檠h(huán)對(duì)象
__next__()——返回列表的值
for結(jié)構(gòu)——自動(dòng)調(diào)用__next__()
生成器可以自定義循環(huán)對(duì)象,方法類似定義函數(shù),但需要把return改為yield
yield——暫停運(yùn)行,返回后面的值,繼續(xù)運(yùn)行
? ? 2)函數(shù)對(duì)象
__call__()——其對(duì)象都被當(dāng)作函數(shù)
? ? 3)模塊對(duì)象
import引入模塊,實(shí)際上就是引入模塊對(duì)象的屬性:
import 模塊——模塊可以是自帶模塊或同文件下的模塊
import 模塊包.模塊——需要在模塊包防止__init__.py文件
from 模塊 in 屬性/模塊*——引入模塊某個(gè)屬性或模塊全部屬性
模塊.屬性()——利用對(duì)象屬性的方法調(diào)用
import 模塊 as 名字——模塊可以改名
模塊對(duì)象.__name__——主程序的文件所對(duì)應(yīng)的模塊對(duì)象的模塊名字為__main__
4、異常對(duì)象
異常也是一種對(duì)象
except 異常A as B——用B代表捕獲到的類型對(duì)象異常A
raise 異常A()——異常A實(shí)際上是異常對(duì)象的類,所以舉出異常會(huì)創(chuàng)建異常對(duì)象