4.1 輕松看對象
4.1.1 面向?qū)ο笳Z言的來歷
- Simula語言
- C++語言
- Java語言
- C#語言
- Objective-C語言
- Python
4.1.2 類
Class 類名:
????屬性變量/方法函數(shù)
類 class:用來描述具有相同的屬性和方法的對象的集合寥殖。它定義了該集合中每個對象所共有的屬性和方法躯概。
object:所有類都會繼承的類文兢,所有類的基類晨缴。
屬性 attribute:類內(nèi)部定義的變量殿托,說明類的屬性焚碌,所有屬于該類的對象會共享這些屬性佛吓。
方法 method:類內(nèi)部定義的函數(shù)蛇更,類的行為屬性。第一個參數(shù)必須是用于指代對象自身的self筋讨,調(diào)用時不用傳入數(shù)據(jù)埃叭。
4.1.3 對象
對象:對象名 = 類名()。對象是類的實(shí)例悉罕。
屬性引用:對象.屬性赤屋。
對象屬性設(shè)置:在類中通過self參數(shù)設(shè)定,用對象.屬性來操作壁袄。必須在某個方法內(nèi)部才能操作類屬性类早,所以對象屬性無法在類下方直接賦初值。
初始化對象屬性:__init__()然想。
- 每當(dāng)對象建立時被調(diào)用莺奔,設(shè)定對象屬性。
- 加入的其他指令會在創(chuàng)建對象時執(zhí)行。
- 在調(diào)用類時令哟,類的后面可以跟一個參數(shù)列表恼琼。這里放入的數(shù)據(jù)將傳給__init__()的參數(shù)。
self:可以在一個方法內(nèi)部調(diào)用同一類的其他方法屏富。
4.1 繼承者們
4.2.1 子類
class 子類名(基類名):
????...
子類:由基類派生的新類晴竞。
繼承:子類會享有基類的所有屬性。繼承的過程中可以再子類中增加基類不存在的屬性狠半。
4.2.2 屬性覆蓋
屬性覆蓋:在子類中替換基類已經(jīng)存在了的屬性噩死。
super:super().被覆蓋的方法名()。一個內(nèi)置類神年,在子類中調(diào)用基類中被覆蓋的方法已维,能產(chǎn)生一個指代父類的對象。
4.3 那些年已日,錯過的對象
4.3.1 列表對象
類型:對象所屬類的名字垛耳。
內(nèi)置類:Python自帶的提前定義好的類。
- type(obj):返回參數(shù)的數(shù)據(jù)類型飘千。
- dir(obj):來查詢一個類或者對象的所有屬性堂鲜。不帶參數(shù)時,返回當(dāng)前范圍內(nèi)的變量护奈、方法和定義的類型列表缔莲;帶參數(shù)時,返回參數(shù)的屬性霉旗、方法列表痴奏。如果參數(shù)包含方法dir(),該方法將被調(diào)用厌秒。如果參數(shù)不包含dir()抛虫,該方法將最大限度地收集參數(shù)信息。
- help(obj):查詢說明文檔简僧。
pass:占位關(guān)鍵字。什么也不做雕欺,保持了程序結(jié)構(gòu)的完整性岛马。
list的方法:列表名.方法名(參數(shù))。
列表名.acount(obj):統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù)屠列。
列表名.index(obj):從列表中找出某個值第一個匹配項(xiàng)的索引位置啦逆。
列表名.append(obj):在列表末尾添加新的元素。
-
列表名.sort(cmp = None, key = None, reverse = False):排序笛洛。
- cmp:可選參數(shù), 如果指定了該參數(shù)會使用該參數(shù)的方法進(jìn)行排序夏志。
- key:主要是用來進(jìn)行比較的元素,只有一個參數(shù)苛让,具體的函數(shù)的參數(shù)就是取自于可迭代對象中沟蔑,指定可迭代對象中的一個元素來進(jìn)行排序湿诊。
- reverse:排序規(guī)則,reverse = True 降序瘦材, reverse = False 升序(默認(rèn))厅须。
列表名.reverse():顛倒次序。
列表名.pop():移除列表中的一個元素食棕,并且返回該元素的值朗和。
列表名.remove(obj):移除列表中某個值的第一個匹配項(xiàng)。
列表名.insert(index, obj):將對象插入列表簿晓。
列表名.clear():清空列表眶拉。
列表名.extend(seq):用新列表擴(kuò)展原來的列表。
4.3.2 元組與字符串對象
元組的方法:元組名.方法名()憔儿。元組只能進(jìn)行查閱忆植,不能進(jìn)行修改操作。
元組名.count(obj):統(tǒng)計某個元素在元組中出現(xiàn)的次數(shù)皿曲。
元組名.index(obj):從元組中找出某個值第一個匹配項(xiàng)的索引位置唱逢。
字符串的方法:字符串名.方法名(參數(shù))。字符串是元組的一種屋休,通過刪除原有字符串坞古,再建立一個新的字符串的方法,能改變字符串劫樟。沒有違背元組的不可變性痪枫。
-
字符串名.count(sub, start = 0,end = len(string)):返回字符串里某個字符出現(xiàn)的次數(shù)。
- sub:搜索的子字符串
- start:字符串開始搜索的位置叠艳。默認(rèn)為第一個字符,第一個字符索引值為0奶陈。
- end:字符串中結(jié)束搜索的位置。字符中第一個字符的索引為 0附较。默認(rèn)為字符串的最后一個位置吃粒。
字符串名.find(str, beg = 0, end = len(string)):檢測字符串中是否包含子字符串。如果包含子字符串返回開始的索引值拒课,否則返回-1徐勃。
字符串名.index(str, beg = 0, end = len(string)):檢測字符串中是否包含子字符串。如果包含子字符串返回開始的索引值早像,否則報錯僻肖。
字符串名.rfind(str, beg = 0 end = len(string)):返回字符串最后一次出現(xiàn)的位置(從右向左查詢),如果沒有匹配項(xiàng)則返回-1卢鹦。
字符串名.rindex(str, beg = 0 end = len(string)):返回字符串最后一次出現(xiàn)的位置(從右向左查詢)臀脏,如果沒有匹配項(xiàng)則報錯。
字符串名.isalnum():如果字符串至少有一個字符并且所有字符都是字母或數(shù)字則返回True,否則返回False。
字符串名.isalpha():如果字符串至少有一個字符并且所有字符都是字母則返回 True,否則返回False揉稚。
字符串名.isdigit():如果字符串至少有一個字符并且只包含數(shù)字則返回True秒啦,否則返回False。
字符串名.istitle():如果字符串至少有一個字符并且所有的詞的首字母都是大寫則返回True窃植,否則返回False帝蒿。
字符串名.isspace():如果字符串至少有一個字符并且只包含空格,則返回True巷怜,否則返回False葛超。
字符串名.islower():如果字符串中包含至少一個區(qū)分大小寫的字符,并且所有這些(區(qū)分大小寫的)字符都是小寫延塑,則返回True绣张,否則返回False。
字符串名.isupper():如果字符串中包含至少一個區(qū)分大小寫的字符关带,并且所有這些(區(qū)分大小寫的)字符都是大寫侥涵,則返回True,否則返回False宋雏。
-
字符串名.split(str="", num=string.count(str)):通過指定分隔符對字符串進(jìn)行切片芜飘,如果參數(shù)num有指定值,則分隔num+1個子字符串磨总。返回分割后的字符串列表嗦明。
- str:分隔符,默認(rèn)為所有的空字符蚪燕,包括空格娶牌、換行(\n)、制表符(\t)等馆纳。
- num:分割次數(shù)诗良。默認(rèn)為 -1, 即分隔所有。
字符串名.rsplit(str="", num=string.count(str))):通過指定分隔符對字符串從右向左進(jìn)行切片鲁驶,如果參數(shù)num有指定值鉴裹,則分隔num+1個子字符串。返回分割后的字符串列表钥弯。
字符串名.join(seq):以字符串作為分隔符壹罚,將seq中所有的元素(的字符串表示)合并為一個新的字符串
字符串名.strip([chars]):截掉字符串左邊的空格或指定字符。
字符串名.replace(old, new[, max]):把字符串中的old(舊字符串)替換成new(新字符串)寿羞,如果指定第三個參數(shù)max,則替換不超過 max 次赂蠢。
字符串名.capitalize():把字符串的第一個字符大寫绪穆。
字符串名.lower():轉(zhuǎn)換字符串中所有大寫字符為小寫。
字符串名.upper():轉(zhuǎn)換字符串中的小寫字母為大寫。
字符串名.swapcase():翻轉(zhuǎn)字符串中的大小寫玖院。
字符串名.title():轉(zhuǎn)換所有的單詞拼寫首字母為大寫菠红,且其他字母為小寫。
字符串名.centet(width[, fillchar]):返回一個原字符串居中,并使用fillchar(默認(rèn)為空格)填充至長度width的新字符串难菌。
字符串名.ljust(width[, fillchar]):返回一個原字符串左對齊,并使用fillchar(默認(rèn)為空格)填充至長度width的新字符串试溯。如果指定的長度小于原字符串的長度則返回原字符串。
字符串名.rjust(width[, fillchar]):返回一個原字符串右對齊,并使用fillchar(默認(rèn)為空格)填充至長度width的新字符串郊酒。如果指定的長度小于原字符串的長度則返回原字符串遇绞。
字符串名.endswith(suffix[, start[, end]]):用于判斷字符串是否以指定后綴suffix結(jié)尾,如果以指定后綴結(jié)尾返回True燎窘,否則返回False摹闽。可選參數(shù)"start"與"end"為檢索字符串的開始與結(jié)束位置褐健。
字符串名.expandtabs(tabsize=8):把字符串中的tab符號('\t')轉(zhuǎn)為空格付鹿,tab符號('\t')默認(rèn)的空格數(shù)是8。
字符串名.lstrip([chars]):截掉字符串開頭指定的字符(默認(rèn)為空格)或字符序列蚜迅。
字符串名.rstrip([chars]):截掉字符串結(jié)尾指定的字符(默認(rèn)為空格)或字符序列舵匾。
字符串名.strip([chars]):移除字符串頭尾指定的字符(默認(rèn)為空格)或字符序列。
字符串名.splitlines([keepends]):按照行('\r', '\r\n', \n')分隔谁不,返回一個包含各行作為元素的列表坐梯,如果參數(shù)keepends為False,不包含換行符拍谐,如果為True烛缔,則保留換行符。
字符串.startswith(substr, beg=0,end=len(string)):檢查字符串是否是以指定子字符串開頭轩拨,如果是則返回True践瓷,否則返回False。如果參數(shù)beg和end指定值亡蓉,則在指定范圍內(nèi)檢查晕翠。
字符串名.zfill(width):返回指定長度的字符串,原字符串右對齊砍濒,前面填充0淋肾。
4.3.3 詞典對象
詞典的方法:詞典名.方法名(參數(shù))。
詞典名.key():以列表返回一個詞典所有的鍵爸邢。
詞典名.values():以列表返回詞典中的所有值樊卓。
詞典名.claer():刪除詞典內(nèi)所有元素。
詞典名.copy():返回一個詞典的淺復(fù)制杠河,即引用碌尔。
詞典名.fromkeys(seq[, value]): 創(chuàng)建一個新詞典浇辜,以序列 seq 中元素做詞典的鍵,value 為字典所有鍵對應(yīng)的初始值唾戚。
詞典名.get(key, default=None):返回指定鍵的值柳洋,如果值不在詞典中返回default值。
詞典名. has_key(key):判斷鍵是否存在于詞典中叹坦,如果鍵在字典dict里返回true熊镣,否則返回false。
詞典名.items():以列表返回可遍歷的(鍵, 值) 元組數(shù)組募书。
詞典名.setdefault(key, default=None):返回指定鍵的值绪囱,如果值不在詞典中將會添加鍵并將值設(shè)為default值。
詞典名.update(dict2):把詞典dict2的鍵/值對更新到詞典里锐膜。
詞典名.pop(key[,default]):刪除字典給定鍵key及對應(yīng)的值毕箍,返回值為被刪除的值。key值必須給出道盏。否則而柑,返回default值。
詞典名.popitem():返回并刪除字典中的最后一對鍵和值荷逞。如果字典已經(jīng)為空媒咳,卻調(diào)用了此方法,就報出KeyError異常种远。
4.4 意想不到的對象
4.4.1 循環(huán)對象
循環(huán)對象:包含有一個__next__()方法涩澡。這個方法的目的是生成循環(huán)的下一個結(jié)果。在生成過循環(huán)的所有結(jié)果之后坠敷,該方法將拋出StopIteration異常妙同。所有要使用的元素可以在循環(huán)過程中逐漸生成。這樣膝迎,不僅節(jié)省了空間粥帚,提高了效率,還會使編程更加靈活限次。
調(diào)用循環(huán)對象:當(dāng)一個像for這樣的循環(huán)語法調(diào)用循環(huán)對象時芒涡,它會在每次循環(huán)的時候調(diào)用 next()方法,直到StopIteration出現(xiàn)卖漫。循環(huán)接收到這個異常费尽,就會知道循環(huán)已經(jīng)結(jié)束,將停止調(diào)用next()羊始。
iter():把一個列表轉(zhuǎn)變?yōu)檠h(huán)對象旱幼。這個循環(huán)對象將擁有__next__()方法。
生成器:自定義循環(huán)對象突委。生成器的編寫方法和函數(shù)定義類似速警,只是在return的地方改為yield叹誉。生成器中可以有多個yield。當(dāng)生成器遇到一個yield時闷旧,會暫停運(yùn)行生成器,返回yield后面的值钧唐。當(dāng)再次調(diào)用生成器的時候忙灼,會從剛才暫停的地方繼續(xù)運(yùn)行,直到下一個yield钝侠。生成器自身又構(gòu)成一個循環(huán)對象该园,每次循環(huán)使用一個yield返回的值。
4.4.2 函數(shù)對象
函數(shù)對象:任何一個有call() 特殊方法的對象都被當(dāng)作是函數(shù)帅韧。
4.4.3 模塊對象
import:引入其他文件中定義的函數(shù)里初,實(shí)際上就是引入模塊對象的屬性『鲋郏可以利用對象.屬性的方式來調(diào)用模塊的方法双妨,可以拓展程序的命名空間,避免同名沖突叮阅。
模塊包:將功能相似的模塊放在同一個文件夾中刁品,構(gòu)成一個模塊包。
- 該文件夾中必須包含一個__init__.py的文件浩姥,提醒Python挑随,該文件夾為一個模塊包。
- __init__.py可以是一個空文件勒叠。
- 每個模塊對象都有一個__name__屬性兜挨,用來記錄模塊的名字。
if __name__ == "__main__":如果這個文件作為一個主程序運(yùn)行眯分,那么將執(zhí)行下面的操作拌汇。 有的時候,一個.py文件中同時有類和對象的定義颗搂,以及對它們的調(diào)用担猛。當(dāng)這些.py文件作為庫引入時,我們可能并不希望執(zhí)行這些調(diào)用丢氢。通過把調(diào)用語句放到上面的if中傅联,就可以在調(diào)用時不執(zhí)行這些調(diào)用語句了。
4.4.4 異常對象
except… as…:用新的變量代表捕獲到的類型對象疚察。
代碼地址:https://gitee.com/sibyltui/learn_programming_from_python