一切皆對象
- 前言
- 簡述
- Python的一等公民
- type、object和class的關(guān)系
- 總結(jié)
前言
猶記得當(dāng)初學(xué)習(xí)Python的時候,對于
Python一切皆對象
很是懵逼,因為Python是面向?qū)ο蟮膭討B(tài)型語言,而在函數(shù)及高階函數(shù)的應(yīng)用中,如若對于一切皆對象不是有很透徹的了解,基礎(chǔ)不是那么牢固的話,那么對于今后的Python進(jìn)階而言,就有點拖后腿了,鑒于有朋友跟我聯(lián)系說,對于一切皆對象掌握的不是太牢固,那么, 木子的本篇博客就對此知識點進(jìn)行概括總結(jié)。
如有不當(dāng)之處,還望各位大佬指正。
簡述
長話短說,本文主要針對 Python一切皆對象 來討論,主要從以下兩個方面來論述:
Python的一等公民
type、object和class的關(guān)系
對于Python的常見內(nèi)置類型,本篇就不做詳細(xì)闡述
內(nèi)置類型:
None(全局只有一個)
數(shù)值類型:int、float、complax(復(fù)數(shù))、bool
迭代類型
序列類型:list、bytes、range、tuple、str、array
映射類型:dict
集合類型:set、frozenset
上下文管理類型:with
Python的一等公民
何為一等公民?
- 可以賦值給一個變量
- 可以添加到集合對象中
- 可以作為參數(shù)傳遞給函數(shù)
- 可以當(dāng)做函數(shù)的返回值
針對賦值給變量及添加到集合對象中,代碼予以展示:
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())
那么上述例子,代碼運行結(jié)果如下:
the func is Python # 函數(shù)func運行,打印結(jié)果
None # 函數(shù)func因沒有return,返回None
the class is Test # 類Test運行,打印結(jié)果
<__main__.Test object at 0x0000024AB34526A0> # 類Test運行,因沒有返回值,調(diào)用item(),返回類Test的對象
那么對于可以作為參數(shù)傳遞,以下代碼展示:
def func(name='Python'):
print(f'the func is {name}')
def decorator_func():
print(f'the decorator_func is running')
return func # 返回函數(shù)func
my_test = decorator_func()
my_test('木子的三維世界') # 傳遞參數(shù),調(diào)用func
上述代碼運行結(jié)果如下:
the decorator_func is running
the func is 木子的三維世界
type、object和class的關(guān)系
上面的代碼是演示何為Python的一等公民,那么對于為什么Python一切皆對象,想必有些道友還是有點不太懂,那么重點來了,了解完type、object和class后,木子覺得大家應(yīng)該就可以徹底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))
上面代碼,運行結(jié)果如下:
# 2019是由int這個類創(chuàng)建的實例
# int這個類是由type這個類創(chuàng)建的實例
# 同上
# stu是類Student創(chuàng)建的實例
# 類Student是由type這個類創(chuàng)建的實例
(
,) # 類int的基類是object這個類
(
,) # 同上
(
,) # 同上
(
,) # 重點:類type的基類也是object這個基類
() # 重點:類object沒有基類
# 難點:類object是由類type創(chuàng)建的實例
# 難點:類type是由type類自身創(chuàng)建的實例
對于上面的代碼,我們可以得出以下結(jié)論:
- 類type產(chǎn)生int實例,類int又有了2019這樣的實例
- 類object是最頂層的基類
- type也是一個類,同時也是一個對象
想必有些道友,看到上面的代碼,已經(jīng)有點懵逼了。請看下圖:
對于上面圖片的
解讀如下
:
- object是一切對象:list、str、dict、tuple的基類,同時object是type的實例
- 類type是自身的實例,同時type也繼承自object類
- 由結(jié)論1和結(jié)論2,得出一切皆對象,同時一切皆繼承自object類
總結(jié)
Python一切皆對象對于函數(shù)式編程,以及Python各種高階用法有很大幫助。
如果哪位道友還不是很清楚,那么
多看看上面的圖片
,沒事兒多看看,多看看不壞事兒。。。好了,話又開始多了
那么想必各位道友看到這里,已經(jīng)對于Python一切皆對象有了比較清的認(rèn)知,后續(xù)木子會更新一篇 關(guān)于Python元類的博客 ,今天也算是做個鋪墊。
備注:為何type類可以自身的實例,有興趣的道友可以了解下指針的概念。
時候不早了,睡覺睡覺,明天周一上班。。。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
