程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python關於isinstance函數的解析(全)

編輯:Python

目錄

  • 前言
  • 1. 基本語法
  • 2. 函數運用
  • 3. 實戰

前言

這個函數有點類似type函數的定義
type判斷函數類型是什麼,而isinstance是通過判斷對象是否是已知的類型
但是isinstance比type高級一些(功能上的差異)

具體差異:

  • type() ,不考慮繼承關系(子類不是父類類型)
  • isinstance() ,考慮繼承關系(子類是父類類型)

1. 基本語法

其基本函數的源碼如下:

def isinstance(x, A_tuple): # real signature unknown; restored from __doc__
""" Return whether an object is an instance of a class or of a subclass thereof. A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B) or ...`` etc. """
pass

isinstance(object, classinfo)
object :實例對象
classinfo :類型可以是 直接或間接類名、基本類型以及元組

2. 函數運用

基礎版的運用:

a = 10086
isinstance (a,int) # true
isinstance (a,str) # false
isinstance (a,(str,int,list)) # 只要滿足元組類型中的其中一個即可,答案是滿足,所以為false

關於python的數據類型具體有哪些
可查看我之前的文章:python數據類型詳細分析(附代碼)

高階版運用:

s = () # 定義一個元組類型
isinstance(s,tuple) # true
isinstance(s,list) # false
s1 = [] # 定義一個列表類型
isinstance(s1,list) # true
s2 = {
} # 定義一個字典類型
isinstance(s2,dict) # true
# 混合類型判斷,通過for索引取值判斷
isinstance(s,(tuple,list,dict))

3. 實戰

結合python的web開發
定義一個字段來獲取字段值

@python_2_unicode_compatible
class xx(Document):
name = StringField(required=False, help_text=u"名字")
age = StringField(required=False, help_text=u"年齡")
# 日志中顯示的字段
_show_log = ('name', 'age')
def __str__(self):
return u"碼農研究僧的名字:{name1},年齡:{name2}".format(name1=self.name,name2=self.age)

關於format的函數可看我之前的文章:python中format格式化函數(全)

通過@log日志注解來獲取

@log('addition')
def yy(name,age):
project = AudioBlack(name,age)
。。。
return project

在log日志的注解中定義如下:(偽代碼)

def log(operation=''):
def _decorate(func):
@wraps(func)
def _wraps(*args, **kwargs):
x, y = kwargs.pop('log', True), kwargs.pop('operator', None)
z = func(*args, **kwargs)
# 默認記錄日志
if isinstance(z, (Document)) and x and y:
。。。。
return z
return _wraps
return _decorate

大致邏輯如下:

在某個地方專門調用yy這個函數,yy這個函數通過注解觸發日志,之後通過調用xx這個類(這些都是開發的內容)

回歸今天的重點:
log日志內部中有一個if isinstance(z, (Document))函數
輸出如下:<class 'projects.models.project.xx'>


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved