python-面向對象速查表-內置方法-內置函數-內置屬性(只整理了部分內容)
- 2019 年 10 月 7 日
- 筆記
今日臨時總結的內容,可能還有些不正確的地方,初步當做個速查表吧。
類的內置函數(繼承object的,自己重寫)
內置函數 |
執行時機 |
注意點 |
調用案例 |
---|---|---|---|
__init__ |
實例化對象時 |
不允許寫返回值(return None和不返回沒區別)子類重寫了__init__()方法要在子類中的__init__()方法調用父類的__init__方法(super(當前類, self).__init__(參數)) |
stu = Student() |
__new__ |
類實例化被調用時 |
|
stu = Studetn() |
__call__ |
調用對象時 |
要記得調用父類的 |
stu(__call__方法的參數) |
__str__ |
對象轉為字元串時 |
必須return 字元串類型的返回值(默認返回值時類型+地址,沒啥意義) |
print(stu) |
__del__ |
對象刪除時(手動或程式結束、垃圾回收機制) |
|
del stu |
__getattr__ ( . 方法原理) |
用 .訪問屬性時 |
該屬性不存在才執行,有__getattribute__方法會先執行__getattribute__方法 |
stu.gaewfg |
__setattr__ ( . 方法原理) |
用 .新增/修改屬性時執行 |
|
stu.sex = 'male' |
__delattr__ ( . 方法原理) |
用del 對象.屬性 刪除屬性時,執行 |
屬性 被刪除時才執行 |
del stu.age |
__getattribute__ |
用 .訪問屬性時 |
不管該屬性有沒有都會執行,寫了這個方法後__getattr__需要自行調用 |
stu.age |
__getitem__ ( [] 原理) |
用 [屬性名] 訪問屬性時 |
|
stu[age] |
__setitem__ ( [] 原理) |
用 [屬性名] = 修改或新增屬性時 |
|
stu[age] = 18 |
__delitem__ ( [] 原理) |
用 [屬性名] 刪除屬性時 |
|
del stu[age] |
__gt__ __ge__ __eq__ __ne__ __lt__ __le__ 比較運算符(自定義比較規則) |
調用對應的比較符時 |
像__gt__ 和 __lt__ 這樣的只需要指定一個即可 |
stu1 > stu2 |
__iter__ _next__ 迭代器協議 |
當成迭代取值對象時 |
|
for i in stu: … |
__enter__ __exit__ 上下文管理 |
跟在 with 後面時 |
|
with MyOpen(__enter__ 的參數) as m: |
類的內置屬性(直接就可以調用的)
屬性 |
作用 |
注意點 |
案例 |
---|---|---|---|
__dict__ |
返回調用者自身的名稱空間 |
|
stu.__dict__ |
__class__ |
返回當前調用對象的類 |
|
|
__slots__ |
指定該類對象能所能擁有的全部屬性,減少記憶體開銷 |
會將類對象的屬性給限制死,視情況使用,連__dict__都會被省掉 |
__slots__ = ['name'] # 加了以後再添加屬性就不行了,限制屬性 |
類.mro() |
獲取到類的mro 列表,即類的查找順序 |
python3中才有這個方法 |
|
類.__name__ |
返回類的類名 |
|
class_name = stu.__class__ |
面向對象相關內置方法(python解釋器內置方法)
函數 |
作用 |
注意點 |
案例 |
---|---|---|---|
hasattr() |
判斷某個對象是否存在某個屬性 |
返回值是True / False |
hasattr(p, 'age') |
getattr() |
從對象中取出值 |
第三個位置默認值,不存在時返回默認值 |
getattr(p, 'age', None) |
setattr() |
為對象添加、修改屬性 |
|
setattr(p, 'name', 'jackson') |
delattr() |
刪除對象屬性 |
|
delattr(p, 'school') |
locals() |
獲取當前名稱空間內的所有名字 |
直接修改無效 |
類的初始化函數初始化屬性(__init__) |
isinstance() |
判斷一個對象是不是某個類/某幾個類的實例 |
第二參數可以傳元組,返回值為 True/ False |
isinstance(obj1, (int, Student)) obj1是int 類型或者 Student 類型? |
issubclass() |
判斷一個類是不是另一個類的子類 |
|
issubclass(type(obj), Animal) 對象obj 的類 是不是Animal的子類 |
越來越感覺時間不夠用了,要加油呀! 一寸光陰一寸金,寸金難買寸光陰。