徹底搞懂Python一切皆對象,面試必過

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/04/27/12788034.html
-Advertisement-
Play Games

前言 猶記得當初學習Python的時候,對於Python一切皆對象很是懵逼,因為Python是面向對象的動態型語言,而在函數及高階函數的應用中,如若對於一切皆對象不是有很透徹的瞭解,基礎不是那麼牢固的話,那麼對於今後的Python進階而言,就有點拖後腿了,鑒於有朋友跟我聯繫說,對於一切皆對象掌握的不 ...


前言

猶記得當初學習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類自身創建的實例
複製代碼

對於上面的代碼,我們可以得出以下結論:

  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就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,裡面很多新python教程項目,還可以跟老司機交流討教!

 

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

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

備註:為何type類可以自身的實例,有興趣的道友可以瞭解下指針的概念。

本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • String源碼分析 類結構 String類實現了Serializable可以被序列化 String類實現了Comparable可以進行比較 String類實現了CharSequence可以按下標進行相關操作 並且String類使用final進行修飾,不可以被繼承 屬性 構造方法 方法 靜態方法 j ...
  • 減少 Python 中迴圈的使用 如何以及為什麼應該在 Python 中減少迴圈的使用? Python 提供給我們多種編碼方式。這裡還要註意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流 ...
  • 今天出了一個重磅消息,個稅起徵點從3500上調到5000啦! 廣大IT農民工的生活壓力又減輕了一些,有沒有 晚上加一個雞腿,要不要~這裡還註意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交 ...
  • 本篇文章給大家介紹一下PHP連接MySQL資料庫的三種方式(mysql、mysqli、pdo),結合實例形式分析了PHP基於mysql、mysqli、pdo三種方式連接MySQL資料庫的相關操作技巧與註意事項。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。 PHP與MySQL的連接 ...
  • 1. 什麼是介面測試?為什麼要做介面測試? 介面測試是測試系統組件間介面的一種測試。介面測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。 由於如今的系統複雜度不斷上升,傳統的測試方法成本急劇增加且測試 ...
  • 一、什麼是協程 引例: import time # 串列執行計算密集型的任務 1.2372429370880127 def func1(): for i in range(10000000): i + 1 def func2(): for i in range(10000000): i + 1 st ...
  • 一、Idea當中有兩種方法可以查看繼承關係 在Idea當中選中一個類,然後按Ctrl+H,可以快速查看當前所選類的繼承關係,如下圖: ​ 同樣選中一個類,按CTRL+ALT+U,即可生成當前類的繼承關係圖,如下圖: ​ 二、二者的區別 上述兩種方法都能幫我們快速查看類之間的層次關係。 ​ 第一種方法 ...
  • 前言 使用Python爬取任意網頁的資源文件,比如圖片、音頻、視頻;一般常用的做法就是把網頁的HTML請求下來通過XPath或者正則來獲取自己想要的資源,這裡我做了一個爬蟲工具軟體,可以一鍵爬取資源 媒體文件;但是需要說明的是,這裡爬取資源文件只針對HTML已有的文件,如果需要二次請求的是爬取不到的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...