完全搞懂Python一切皆對象!!!

前言

猶記得當初學習Python的時候,對於Python一切皆對象非常懵逼,由於Python是面向對象的動態型語言,而在函數及高階函數的應用中,如若對於一切皆對象不是有很透徹的瞭解,基礎不是那麼牢固的話,那麼對於從此的Python進階而言,就有點拖後腿了,鑑於有朋友跟我聯繫說,對於一切皆對象掌握的不是太牢固,那麼, 木子的本篇博客就對此知識點進行歸納總結。 若有不當之處,還望各位大佬指正。編程


簡述

長話短說,本文主要針對Python一切皆對象來討論,主要從如下兩個方面來論述:bash

Python的一等公民app

type、object和class的關係函數式編程

對於Python的常見內置類型,本篇就不作詳細闡述函數

內置類型: None(全局只有一個) 數值類型:int、float、complax(複數)、bool 迭代類型 序列類型:list、bytes、range、tuple、str、array 映射類型:dict 集合類型:set、frozenset 上下文管理類型:with學習


Python的一等公民

何爲一等公民?ui

  • 能夠賦值給一個變量
  • 能夠添加到集合對象中
  • 能夠做爲參數傳遞給函數
  • 能夠當作函數的返回值

針對賦值給變量及添加到集合對象中,代碼予以展現:spa

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的對象
複製代碼

那麼對於能夠做爲參數傳遞,如下代碼展現:code

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類自身建立的實例
複製代碼

對於上面的代碼,咱們能夠得出如下結論:

  1. 類type產生int實例,類int又有了2019這樣的實例
  2. 類object是最頂層的基類
  3. type也是一個類,同時也是一個對象

想必有些道友,看到上面的代碼,已經有點懵逼了。請看下圖:

type、object和class的關係圖

對於上面圖片的解讀以下

  1. object是一切對象:list、str、dict、tuple的基類,同時object是type的實例
  2. 類type是自身的實例,同時type也繼承自object類
  3. 由結論1和結論2,得出一切皆對象,同時一切皆繼承自object類

總結

Python一切皆對象對於函數式編程,以及Python各類高階用法有很大幫助。 若是哪位道友還不是很清楚,那麼多看看上面的圖片,沒事兒多看看,多看看不壞事兒。。。好了,話又開始多了

那麼想必各位道友看到這裏,已經對於Python一切皆對象有了比較清的認知,後續木子會更新一篇關於Python元類的博客,今天也算是作個鋪墊。

備註:爲什麼type類能夠自身的實例,有興趣的道友能夠了解下指針的概念。

時候不早了,睡覺睡覺,明天週一上班。。。

相關文章
相關標籤/搜索