對象python
構造角度數據結構
基本數據結構(使用相應的字面量)函數
自定義對象(使用構造器或其餘構造模式)spa
組成角度orm
程序中存儲的數據對象
包含:數據(複合)排序
屬性:標識,地址/引用,類型,值繼承
實例被建立後,標識與類型不可改變遞歸
對象是類型的實例接口
類型:對象的內部表示 (屬性)與 支持的方法
可變對象:值可改變
不可變對象
容器,集合:包含對其餘對象的引用
對象擁有屬性和方法
屬性:相關的值
方法:在對象上執行調用操做()的函數
點運算符,訪問屬性與方法
3.2對象標識與類型
內置函數
標識
id():返回對象標識(整數)(Linux:文件標識符)
is():比較兩個對象的標識
類型
type():返回對象的類型
由於類型是對象,類型的定義惟一,對其全部實例相同
因此可用
type(a) is type(b)
對兩個實例的類型作比較
內部類型都有名字,list,dict,file等
檢查是否爲某種內置類型
type(a) is list
繼承:某個類的特殊化
檢查繼承
isinstance(a,list)
其餘:相同接口但不是實現於繼承(抽象——實現)
3.3引用計數與垃圾回收
對象引用計數增長:
分配新名字(引用,別名)
放入容器(容器包含對象的引用:容器定義)
引用計數減小:
del語句
引用超出做用域(退出)
從新賦值
對不可變數據,在程序不一樣地方可共享,節約內存
垃圾回收機制:
1.引用爲0,則以後不可能被訪問到(Linux:最後一個連接爲硬連接)
2.週期檢測器:搜索不可訪問的對象週期,刪除。按期進行
3.4引用與複製
賦值動做的含義:
不可變對象:建立副本,副本指的是值
可變對象:建立引用
可變容器:賦值,淺複製
賦值:建立引用
a=b
a is b
淺複製:元素共享
a=list(b)
a is not b
深複製:建立對象的副本,遞歸複製副本
3.5第一類對象
python中被標識符引用的都是第一類對象
3.6內置類型:表示數據
null對象
字面量:None
函數缺省返回值時,返回None
可選參數的默認值
數值類型
序列類型
包含
可變:列表
不可變:字符串,元組
range不可變?
映射類型
對象的集合
字典:鍵-值
鍵必須爲不可變對象
變key——hash——衝突
原key對應value不可訪問
集合類型
保存不可變對象
3.7內置類型:表示結構
3.7.1 可調用類型
1.用戶定義函數:
def語句
lambda表達式
模塊級別的可調用對象
f.__屬性__
name
dict字典:函數屬性
defaults元組:默認參數
globals
closure元組:嵌套做用域相關數據
2.方法:類中定義
靜態方法:普通
實例方法:實例做爲第一個參數隱式傳遞,聲明時寫出,調用時不寫,約定俗成爲self
訪問實例入口(容許進入實例做用域)——訪問屬性——修改(增刪改查)
類方法:類型做爲第一個參數隱式傳遞,聲明時寫出,調用時不寫,約定俗成爲cls
訪問類的入口(進入類做用域???python無類做用域???)
使用:
建立實例
查找方法
調用方法
綁定方法:實例.方法 可調用對象,封裝了實例與方法。已經得到了參數self值的方法。科裏化
函數聲明——綁定參數——可調用對象——調用——返回值
函數的參數綁定過程:一次綁定全部 or 聲明處綁定默認值(靜態) or 調用時綁定當前執行環境(動態) or 方法綁定實例 or 泛型在調用處綁定類型參數
未綁定方法:類型.方法 未得到參數self,須要顯式傳遞實例。
調用運算符()
m.__屬性__
name
class定義方法的類
func實現方法的函數對象
self方法相關實例(非綁定方法,爲None)
py3對self參數不做類型檢查?
3.內置函數與方法
self方法相關實例(非綁定方法,爲None)
4.可調用的類與實例
定義__call__()
3.7.2類,類型,實例
type()返回對象的類型
type(Class) <type 'type'>
類型對象t屬性
t.__屬性__
__name__類名稱
__bases__基類元組
__dict__字典:類方法與變量
類實例對象i屬性
i.__class__實例所屬類
i.__dict__
3.7.3模塊類型
容器,保存import加載的對象
屬性:__dict__ 字典實現的命名空間
3.8解釋器內部的內置類型
代碼對象
幀對象
跟蹤對象
生成器對象
切片對象
3.9對象行爲與特殊方法
特殊方法實現了對行爲的支持
能夠自定義方法,來支持特定的操做
行爲 方法
建立,銷燬 __new__, __init__, __del__
字符串表示(類型轉化) __str__, __repr__, __format__
比較,排序 __bool__, __hash__, __lt__
類型檢查
isinstance(), issubclass() __instance(subclass)check__
屬性訪問(.運算符) __get(set,del)attr__
屬性操做(額外邏輯層),與屬性訪問的方法交互
描述符屬性訪問——顯示調用描述符對象的相應方法
描述符對象包裝 __get__,set,delete
序列與映射 __len_,get/set/del item ,contains
迭代 __iter__,返回可迭代對象
數學操做 不少
調用操做 __call__
上下文管理with __enter__,exit
對象檢查dir() __dir__