4.1 輕松看對象
除了面向過程的編程范式,Python還支持面向對象的編程范式。
2.類
把相近的東西歸為一類,而且給這個類起一個名字。
需要用到:class函數
用法:class 類名(對象類別)
?????????? statement
區分屬性:①數據性:e.g. feature=True
????????????????? ②行為:e.g. def (行為名)(self,參數)
??????????????????????????????? statement
3.對象
定義:對象是類的實例:summer=Bird()
對屬性的引用:對象.屬性:summer.chirp("jijiji")
對對象個性的修改:
①通過行為和self:def set_color(self,color)
??????? ?????????????????????????????self.color=color(給定的參數)
②特殊方法:_init_()、_add_().....(在方法名前后加兩個下劃線)
在引入對象的同時定義參數
self:可以在一個方法內部調用同一類的其他方法
4.2 繼承者們
1.子類
①子類:擁有父類的所有屬性,同時可定義子類的特有屬性,還可替換。
②繼承:子類擁有父類的所有屬性。
2.屬性覆蓋
使用同名屬性名,父類的屬性會被子類覆蓋。
super():一個內置類,能產生指代父類的對象。通過super,我們在子類的同名方法中調用了父類的方法。
4.3 那些年,錯過的對象
查找類的名字:type()
查詢類的屬性:dir()、help()
①列表對象:
pass:特殊關鍵字,用于說明,在該語法結構中“什么都不做”,保持結構完整性
我們看到類還有許多“隱藏技能”。比如下面一些list的方法,可以返回列表的信息:
>>>a = [1, 2, 3, 5, 9.0, "Good", -1, True, False, "Bye"]
>>>a.count(5) # 計數,看總共有多少個元素5
>>>a.index(3) # 查詢元素3第一次出現時的下標
>>>a.append(6) # 在列表的最后增添一個新元素6
>>>a.sort() # 排序
>>>a.reverse() # 顛倒次序
>>>a.pop() # 去除最后一個元素,并將該元素返回。
>>>a.remove(2) # 去除第一次出現的元素2
>>>a.insert(0,9) # 在下標為0的位置插入9
>>>a.clear() # 清空列表
②元組與字符串對象
>>>a = (1, 3, 5)
>>>a.count(5) # 計數,看總共有多少個元素5
>>>a.index(3) # 查詢元素3第一次出現時的下標
>>>a="abc"
>>>a.index("c")
>>>str = "Hello World!"
>>>sub = "World"
>>>str.count(sub) # 返回:sub在str中出現的次數
>>>str.find(sub) # 返回:從左開始,查找sub在str中第一次出現的位置。 #如果str中不包含sub,返回 -1
>>>str.index(sub) # 返回:從左開始,查找sub在str中第一次出現的位置。 #如果str中不包含sub,舉出錯誤
>>>str.rfind(sub) # 返回:從右開始,查找sub在str中第一次出現的位置 #如果str中不包含sub,返回 -1
>>>str.rindex(sub) # 返回:從右開始,查找sub在str中第一次出現的位置 # 如果str中不包含sub,舉出錯誤
>>>str.isalnum() # 返回:True,如果所有的字符都是字母或數字
>>>str.isalpha() # 返回:True,如果所有的字符都是字母
>>>str.isdigit() # 返回:True,如果所有的字符都是數字
>>>str.istitle() # 返回:True,如果所有的詞的首字母都是大寫
>>>str.isspace() # 返回:True,如果所有的字符都是空格
>>>str.islower() # 返回:True,如果所有的字符都是小寫字母
>>>str.isupper() # 返回:True,如果所有的字符都是大寫字母
>>>str.split([sep, [max]]) # 返回:從左開始,以空格為分隔符(separator),# 將str分 割為多個子字符串,總共分割max次。# 將所得的子字符串放在一個表中返回。可以以 # str.split(",")的方式使用其他分隔符
>>>str.rsplit([sep, [max]]) # 返回:從右開始,以空格為分隔符(separator),# 將str分 割為多個子字符串,總共分割max次。# 將所得的子字符串放在一個表中返回。可以以 # str.rsplit(",")的方式使用其他分隔符
?>>>str.join(s) # 返回:將s中的元素,以str為分隔符, # 合并成為一個字符串。
>>>str.strip([sub]) # 返回:去掉字符串開頭和結尾的空格。 # 也可以提供參數sub,去掉位于字符串開頭和結尾的sub
>>>str.replace(sub, new_sub) # 返回:用一個新的字符串new_sub替換str中 # 的sub
>>>str.capitalize() # 返回:將str第一個字母大寫
>>>str.lower() # 返回:將str全部字母改為小寫
>>>str.upper() # 返回:將str全部字母改為大寫
>>>str.swapcase() # 返回:將str大寫字母改為小寫,小寫字母改為大寫
>>>str.title() # 返回:將str的每個詞(以空格分隔)的首字母# 大寫
>>>str.center(width) # 返回:長度為width的字符串,將原字符串放入# 該字符串中 心,其他空余位置為空格。
>>>str.ljust(width) # 返回:長度為width的字符串,將原字符串左對# 齊放入該字符串,其 他空余位置為空格。
>>>str.rjust(width) # 返回:長度為width的字符串,將原字符串右對齊放入# 該字符串,其 他空余位置為空格。
③詞典對象
for k in example_dict.keys():
print(example_dict[k])
for v in example_dict.values():
????????? print(v)
for k,v in example_dict.items():
????????? print(k, v)
用clear()方法,清空整個詞典:
example_dict.clear() # 清空example_dict,example_dict變為{}
4.4 意想不到的對象
①循環對象:包含有一個_next_()方法,這個方法的目的是生成循環的下一個結果。在生成過循環的所有結果之后,該方法將拋出StopIteration異常。循環接收到這個異常,就會知道循環已經結束,將停止調用__next__()。
手動循環例子:
>>>example_iter = iter([1, 2])
?>>>example_iter.__next__() # 顯示1
>>>example_iter.__next__() # 顯示2
>>>example_iter.__next__() # 出現StopIteration異常。
我們可以把 循環對象包裹在for中自動進行循環:
for itemin iter([1, 2]):
?print(item)
相對于序列,循環對象的好處在于:不用在循環還沒開始的時候,就生成要使用的元素。所有要使用的元素可以在循環過程中逐漸生成。這樣,不僅節省了空間,提高了效率,還會使編程更加靈活。
生成器:自定義循環對象。
②函數對象
任何一個有_call_()特殊方法的對象:
class SampleMore(object):
def __call__(self, a):
return a + 5
add_five = SampleMore() # 生成函數對象
print(add_five(2)) #像一個函數一樣調用函數對象,結果為7。
③模塊對象
Python中的模塊對應一個.py文件
語法:import xxx、from xxx import xxx
引入模塊的所有屬性:from xxx import *
也可以用對象.屬性的方式調用。
④異常對象
try等捕捉到的程序中出現的異常。
except… as…:用新的變量代表捕獲到的類型對象。