前言
猶記得當初學習Python的時候,對于Python一切皆物件很是懵逼,因為Python是面向物件的動態型語言,而在函式及高階函式的應用中,如若對于一切皆物件不是有很透徹的了解,基礎不是那么牢固的話,那么對于今后的Python進階而言,就有點拖后腿了,鑒于有朋友跟我聯系說,對于一切皆物件掌握的不是太牢固,那么, 木子的本篇博客就對此知識點進行概括總結, 如有不當之處,還望各位大佬指正,
簡述
長話短說,本文主要針對Python一切皆物件來討論,主要從以下兩個方面來論述:
Python的一等公民
type、object和class的關系
對于Python的常見內置型別,本篇就不做詳細闡述
這里要注意:不管你是為了Python就業還是興趣愛好,記住:專案開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新python教程專案,還可以跟老司機交流討教!
內置型別: None(全域只有一個) 數值型別:int、float、complax(復數)、bool 迭代型別 序列型別:list、bytes、range、tuple、str、array 映射型別:dict 集合型別:set、frozenset 背景關系管理型別:with
Python的一等公民
何為一等公民?
- 可以賦值給一個變數
- 可以添加到集合物件中
- 可以作為引數傳遞給函式
- 可以當做函式的回傳值
針對賦值給變數及添加到集合物件中,代碼予以展示:
def func(name='Python'):
print(f'the func is {name}')
class Test:
def __init__(self):
print(f'the class is {Test.__name__}')
obj_list = []
obj_list.append(func)
obj_list.append(Test)
for item in obj_list: # 添加至集合物件中
print(item())
復制代碼
那么上述例子,代碼運行結果如下:
the func is Python # 函式func運行,列印結果
None # 函式func因沒有return,回傳None
the class is Test # 類Test運行,列印結果
<__main__.Test object at 0x0000024AB34526A0> # 類Test運行,因沒有回傳值,呼叫item(),回傳類Test的物件
復制代碼
那么對于可以作為引數傳遞,以下代碼展示:
def func(name='Python'):
print(f'the func is {name}')
def decorator_func():
print(f'the decorator_func is running')
return func # 回傳函式func
my_test = decorator_func()
my_test('木子的三維世界') # 傳遞引數,呼叫func
復制代碼
上述代碼運行結果如下:
the decorator_func is running
the func is 木子的三維世界
復制代碼
type、object和class的關系
上面的代碼是演示何為Python的一等公民,那么對于為什么Python一切皆物件,想必有些道友還是有點不太懂,那么重點來了,了解完type、object和class后,木子覺得大家應該就可以徹底hold住了, 為便于理解,代碼予以展示:
# 示例如下
a=2019
b="一切皆物件"
print(type(2019))
print(type(int))
print(type(b))
print(type(str))
class Student:
pass
stu = Student()
print(type(stu))
print(type(Student))
print(int.__bases__)
print(str.__bases__)
print(Student.__bases__)
print(type.__bases__)
print(object.__bases__)
print(type(object))
print(type(type))
復制代碼
上面代碼,運行結果如下:
<class 'int'> # 2019是由int這個類創建的實體
<class 'type'> # int這個類是由type這個類創建的實體
<class 'str'> # 同上
<class 'type'>
<class '__main__.Student'> # stu是類Student創建的實體
<class 'type'> # 類Student是由type這個類創建的實體
(<class 'object'>,) # 類int的基類是object這個類
(<class 'object'>,) # 同上
(<class 'object'>,) # 同上
(<class 'object'>,) # 重點:類type的基類也是object這個基類
() # 重點:類object沒有基類
<class 'type'> # 難點:類object是由類type創建的實體
<class 'type'> # 難點:類type是由type類自身創建的實體
復制代碼
對于上面的代碼,我們可以得出以下結論:
- 類type產生int實體,類int又有了2019這樣的實體
- 類object是最頂層的基類
- type也是一個類,同時也是一個物件
想必有些道友,看到上面的代碼,已經有點懵逼了,請看下圖:
對于上面圖片的解讀如下:
- object是一切物件:list、str、dict、tuple的基類,同時object是type的實體
- 類type是自身的實體,同時type也繼承自object類
- 由結論1和結論2,得出一切皆物件,同時一切皆繼承自object類
總結注意:不管你是為了Python就業還是興趣愛好,記住:專案開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,里面很多新python教程專案,還可以跟老司機交流討教!
Python一切皆物件對于函式式編程,以及Python各種高階用法有很大幫助, 如果哪位道友還不是很清楚,那么多看看上面的圖片,沒事兒多看看,多看看不壞事兒,,,好了,話又開始多了
那么想必各位道友看到這里,已經對于Python一切皆物件有了比較清的認知,后續木子會更新一篇關于Python元類的博客,今天也算是做個鋪墊,
備注:為何type類可以自身的實體,有興趣的道友可以了解下指標的概念,
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/152939.html
標籤:Python
