Python3高級核心技術97講 筆記html
""" 特色: 1.能夠賦值給一個變量 2.能夠增長到集合對象中 3.能夠做爲參數傳遞給函數 4.能夠當作函數的返回值 """ def ask(name="coder"): print(name) class Person: def __init__(self): print("coder") def print_type(item): print(type(item)) def decorator_func(): print("dec start") return ask # 做爲函數的返回值,Python裝飾器的部分實現原理 # 函數賦值給變量後執行 my_func = ask my_func("王尼瑪") # 輸出」王尼瑪「 # 類做爲變量賦值給變量後實例化 my_class = Person my_class() # 會執行__init__()方法,輸出「coder」 # 類和函數增長到集合對象 obj_list = [] obj_list.append(ask) obj_list.append(Person) for item in obj_list: print(item()) print_type(item) # 做爲參數傳入函數
""" 原來type並無那麼簡單。 """ >>> a = 1 >>> type(1) <class 'int'> >>> type(int) <class 'type'> >>> b = "abc" >>> type(b) <class 'str'> >>> type(str) <class 'type'> """ wow, 得出來一個現象 type->int->1和type->str->"abc", 那麼猜想咱們本身定義的類是否是也是這樣關係呢? """ >>> class Student(): ... pass ... >>> stu = Student() >>> type(stu) <class '__main__.Student'> >>> type(Student) <class 'type'> """ soga, 咱們能夠得出一個結論: type->class->obj, 也就是說,咱們所定義的類是type類的一個實例化對象, 而咱們的stu是咱們本身定義類Student的一個實例化對象。 也就是說的<class 'type'>是用來生成類的。 看的課程的這裏,我彷彿感覺到了Python一切皆對象的魅力所在, 哈哈哈。 """ # object是全部類默認的一個基類, 即object是最頂層基類。 >>> Student.__bases__ (<class 'object'>,) >>> class MyStudent(Student): ... pass ... >>> MyStudent.__bases__ (<class '__main__.Student'>,) """ 問題來了:type也是一個類,同時type也是一個對象,那麼type的基類是誰? """ >>> type.__bases__ (<class 'object'>,) # 好玩的來嘍,若是執行type(object)看看object類是誰生成的呢? >>> type(object) <class 'type'> >>> type(type) <class 'type'> # 再來好玩的!來看看object類基類誰呢? >>> object.__bases__ () # 結論:type繼承了object,而object又是type的實例。 # 老師畫了關係圖,以下。
這張圖給我展示了<class 'type'>
是個厲害的傢伙啊,他把一切都變成了對象,連本身都不放過。因此,有了<class 'type'>
你就不缺對象啦,哈哈哈哈。python
<class 'object'>
是全部類的祖先哦,從圖上看來,<class 'type'>
與<class 'object'>
有着不倫的關係啊!!!編程
好啦,課程老師告訴咱們,其實上面一系列的不倫關係都是指針
這個東西乾的,嘿嘿嘿........app
總結:類都是type的實例 (object也是type的實例,type自己也是本身的實例),全部的類的頂層基類都是object (type的基類也是object)。Python一切皆對象的哲學就是玩起來的。函數
Python一切皆對象這麼作就是爲了一切均可以輕易的修改,使得Python很是靈活。C++/Java中的類一旦加載到內存後就不能修改(不絕對,修改很困難)。Python把類都搞成對象了,這樣修改起來就很方便。性能
再次梳理:一切類都是由<class 'type'>
所生出來的,<class 'object'>
很特別,它雖是<class 'type'>
的爸爸但也是由<class 'type'>
生出來的。3d
咦?<class 'type'>
和<class 'object'>
那個先出來的?指針
怎麼我越想越亂?code
難道?<class 'type'>在把<class 'object'>生出來的同時,<class 'object'>
又作了<class 'type’>
的爸爸???WTF???htm
求評論區解釋,遇到的問題就是:type須要繼承object,可是object又是type的實例,這樣的關係有矛盾啊?
(1) 身份
>>> a = 1 """ 這裏的1是值由<class 'int'>進行封裝,最後變量a指向這個obj """ >>> id(a) 5656454878 # 不一樣機器不一樣結果
(2) 類型
(3) 值
""" 解釋器啓動時None對象被建立,且全局只有一個。 """ >>> a = None >>> b = None >>> id(a) == id(b) # 經過對比兩個變量所指向內存地址相同,可見None對象全局只有一個。 True
(1) int
(2) float
(3) complex (複數)
(4) bool
(1) list
(2) bytes、bytearray、memoryview (二進制序列)
(3) range
(4) tuple
(5) str
(6) array
(1) set
與dict
實現原理類似,性能高。
(2) frozenset
frozen
adj. 凍結的;冷酷的
v. 結冰;凝固;變得刻板
對於Python,一切皆對象啦。那麼就會有一下類型。
(1) 模板類型
(2) class和實例
(3) 函數對象
(4) 方法類型
(5) 代碼類型
(6) object類型
(7) type 類型
(8) ellipsis 類型
(9) notimplemented 類型
Python 的靈活性就使得它的嚴謹性有必定損失,可是其帶給咱們開發效率上的提高是顯然的。