深入理解Python的類,實例和type函數

問題起源:

class t():pass
s1 = t()
s2 = type("Student2",(),{})
isinstance(s1, type), isinstance(s2, type)

為什么第一個是false,第二個是true呢

根因定位:

在Python中,一切皆對象,類是對象,實例也是對象。但它們是不同類型的對象。

  • s1 = t() 這一行代碼創建了類t的一個實例,賦值給變量s1。這里,s1是t的一個實例對象,而不是一個類。
  • s2 = type(“Student2”, (), {}) 這一行代碼動態創建了一個新類,類名為"Student2",沒有父類(()中為空),類體中沒有任何屬性或方法({}為空字典)。type在這里被用作動態創建類的函數,這個函數返回一個新的類對象。因此,s2是一個類,而不是某個類的實例。

當調用isinstance(object, classinfo)函數時,它會檢查object是否是classinfo的實例或者是classinfo的子類的實例。在給定上述情況:

  • isinstance(s1, type) 會返回False,因為s1是t類的一個實例,而不是一個類。在Python中,type是所有新式類的元類,但s1不是一個類,它是類t的實例。
  • isinstance(s2, type) 會返回True,因為s2是使用type函數動態創建的一個類對象。在Python中,所有的類本質上都是type的實例。就像是類是對象的模板一樣,type是類的模板。因此,s2是type的一個實例。

結論:

簡而言之,第一個表達式是False因為s1是一個類的實例,而不是類本身;第二個表達式是True,因為s2本身是一個由type創建的類。

isinstance本質是判斷第一個參數是不是第二個參數的實例

type的對象類,類的對象是實例,type—>class—>instance

可以推斷:
isinstance(s1.class, type)為true
實踐證明:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11502.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nacos在沒有指定數據源的情況下默認使用什么數據庫?

在沒有特別指定數據源的情況下,Nacos 默認使用內嵌的數據庫 Derby 來存儲其數據。Derby 是一個輕量級的、基于 Java 的數據庫管理系統,適合于開發和測試環境,因為它簡單易部署且無需額外的數據庫服務器。然而,對于生產環境&#x…

使用ORM快速獲取業務對象列表

通常在實際開發中,業務對象的信息是需要來自多個數據表的。 我們如果想要獲取這個業務對象,就要先查詢數據表,再把查詢到的數據依次循環,組合轉換封裝成業務要使用的對象類型列表。 如果使用了ORM,那么這個過程就可以簡…

Stability AI 推出 Stable Artisan,終于可以在Discord上使用Stable Diffusion了!

Stable Diffusion 社區最常見的要求之一是能夠直接在 Discord 上使用他們的模型。近期,Stability AI 推出 Stable Artisan,這個需求終于被實現了。 Stable Artisan 支持在 Discord 上生成媒體,由 Stability AI 的尖端圖像和視頻模型 Stable D…

基于Springboot的實習生管理系統(有報告)。Javaee項目,springboot項目。

演示視頻: 基于Springboot的實習生管理系統(有報告)。Javaee項目,springboot項目。 項目介紹: 采用M(model)V(view)C(controller)三層體系結構&a…

mysql group by使用方法實例講解

MySQL中GROUP BY語句用于對某個或某些字段查詢分組,并返回重復記錄的第一條,本文章通過實例向大家介紹mysql group by使用方法和需要注意的地方,感興趣的朋友可以參考一下。 現在有這樣一個數據表book idfirst_namelast_namecityage1JasonM…

知乎知+廣告推廣該如何做?怎么收費?

知乎作為一個匯聚高質量用戶群體的知識分享平臺,成為了眾多品牌和產品推廣的優選之地。特別是知乎的“知”廣告推廣服務,以其精準定向、內容原生的特點,深受廣告主青睞。 一、知乎知廣告推廣基礎 1. 什么是知乎知? 知是知乎官方…

C++初階學習第七彈——探索STL奧秘(二)——string的模擬實現

標準庫中的string:C初階學習第六彈——string(1)——標準庫中的string類-CSDN博客 前言: 在前面我們已經學習了如何使用標準庫中的string類,但作為一個合格的程序員,我們不僅要會用,還要知道如…

C++類和對象下——實現日期類

前言 在學習了類和對象的六大成員函數后,為了鞏固我們學習的知識可以手寫一個日期類來幫助我們理解類和對象,加深對于其的了解。 默認函數 構造函數 既然是寫類和對象,我們首先就要定義一個類,然后根據實際需要來加入類的數據與函…

AI編程工具為什么選github copilot?

Github Copilot 是一個奇跡 它的競爭對手(Amazon, Google, Meta, 騰訊)都是免費的,但每月10-20美元的Github Copilot市場占有率最高。 1、2021年6月上線,比ChatGPT早近一年半 2、GitHub統計: 88%的用戶獲得效率提升平…

element ui的確認提示框文字樣式修改

修改確認提示框文字樣式修改,使用message屬性修改: 例: js代碼: this.$msgbox({title: 確定要刪除嗎?,message: this.$createElement(p, null, [this.$createElement(span, { style: color: red }, 該素材一旦刪除,…

Spring Boot日志

目錄 一、日志概述 1、為什么要學習日志? 2、日志的用途 (1)系統監控 (2)數據采集 (3)日志審計 二、日志使用 1、打印日志 (1)在程序中得到日志對象 &#xf…

QNX SLM介紹

QNX SLM SLM是Qnx中用來加載Application的組件,它可以監控Application行為(比如異常退出時重新Application拉起)、控制Application間的啟動時序。 QNX的SLM與Android RC文件類似。 下面摘自QNX官網介紹 System launch and monitor: launch c…

Redis日常維護流程及技巧:確保穩定性與性能

目錄 一、監控和報警設置 1.實時監控:洞察Redis的脈搏 (1). 資源使用監控 (2). 數據訪問模式監控 (3). 持久化監控 (4). 客戶端連接 2.報警機制:快速響…

標準Modbus TCP雙網口開關量模塊

M140E以太網遠程I/O無線數據采集模塊是一款工業級、隔離設計、高可靠性、高穩定性和高精度數據采集模塊,嵌入式32位高性能微處理器MCU,集成2路工業10/100M自適應以太網模塊里面。提供多種I/O,支持標準Modbus TCP,可集成到SCADA、O…

Spring STOMP-連接到消息代理

STOMP 代理中繼維護一個與消息代理的“系統”TCP 連接。這個連接僅用于來自服務器端應用程序的消息,不用于接收消息。您可以為此連接配置STOMP憑據(即STOMP幀的login和passcode頭部)。這在XML命名空間和Java配置中都以systemLogin和systemPas…

CentOs搭建Kubernetes集群

kubeadm minikube 還是太“迷你”了,方便的同時也隱藏了很多細節,離真正生產環境里的計算集群有一些差距,畢竟許多需求、任務只有在多節點的大集群里才能夠遇到,相比起來,minikube 真的只能算是一個“玩具”。 Kuber…

spring基礎使用(案例)

基于xml使用: 準備: 1.Dao層(接口): public interface UserDao {public void save(); } 1.1 Dao層(實現類): public class UserDaoIim implements UserDao {Overridepublic vo…

Day53代碼隨想錄動態規劃part13:300.最長遞增子序列、674. 最長連續遞增序列、718. 最長重復子數組

Day52 動態規劃part13 300.最長遞增子序列 leetcode鏈接:300. 最長遞增子序列 - 力扣(LeetCode) 題意:給你一個整數數組 nums ,找到其中最長嚴格遞增子序列的長度。子序列是由數組派生而來的序列,刪除&a…

23種設計模式(軟考中級 軟件設計師)

設計模式 23個設計模式,23個意圖 1. 設計模式概要 設計模式的核心在于提供了相關問題的解決方案,使得人們可以更加簡單方便的復用成功的設計和體系結構 設計模式的類別 創建型結構型行為型類工廠方法模式適配器模式(類)解釋器模…