python的自省函式, 快速找出BUG的良器

2022-07-06 23:18:09 字數 1879 閱讀 6202

python內建的好多自省函式,  合理使用可快速查詢相關提示, 快速找到問題點, 以下開始具體說明

1. dir()  列出物件的所有屬性和方法

如:  dir(list)  可以列出列表的所有屬性和方法

2. callable()  判斷物件是否可以被呼叫

callable() 函式用於檢查乙個物件是否是可呼叫的。如果返回true,object仍然可能呼叫失敗;但如果返回false,呼叫物件    ojbect絕對不會成功。

對於函式, 方法, lambda 函式, 類, 以及實現了__call__方法的類例項, 它都返回 true。

語法:  callable(object)    object為物件 ,可呼叫返回true, 不可呼叫返回false

3. isinstance()   判斷某個變數是否具有某種型別

語法: isinstance(object, classinfo)     object -- 例項物件, classinfo -- 可以是直接或間接類名、基本型別或者由它們組成的元組

如果object是classinfo的例項, 或者object是classinfo類的子類的乙個例項, 則返回true, 否則返回false

舉例:  isinstance(4, int)  返回true

isinstnace(4, (string, float, int))   4 是元組(string, float, int) 中的一種, 也會返回true

4. hasatter() 和getattr()  判斷物件是否有某個屬性及獲取屬性

語法:    hasattr(object, name)    getattr(object, name [, default])

舉例說明:

class demo(object):

def __init__(self):

self.name = "laowang"

def make(self):

print('ok')

a = demo()

print(hasattr(a, "name"))           例項化的 物件a具有name屬性, 則返回true, 沒有則返回false

print(getattr(a, "age", 18))         例項化的物件a不具有age屬性, 則會返回後面的18, 如果不指定18, 則報錯

5. help()   檢視python的幫助文件

不確定怎麼使用某個內建方法可以使用help()檢視

如  help(print), 會返回print()的詳細使用方式, 後面的flush引數你真的懂嗎?

help on built-in function print in module builtins:

print(...)

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=false)

prints the values to a stream, or to sys.stdout by default.

optional keyword arguments:

file: a file-like object (stream); defaults to the current sys.stdout.

sep: string inserted between values, default a space.

flush: whether to forcibly flush the stream.

6.  其餘的經常使用的還包括

type()   返回物件的型別

id()   返回物件的引用位址, 類似於 is , 可以檢視兩個變數的記憶體位址是否一樣  

python的自省機制

1 自省 自省就是物件導向的語言所寫的程式在執行時,能夠知道物件的型別。簡單一句就是,執行時能夠獲知物件的型別。2 自省機制 自省機制通過函式實現,是乙個函式。例如python,buby,object c,c 都有自省的能力,這裡面的c 的自省的能力最弱,只能夠知道是什麼型別,而像python可以知...

Python的自省機制

什麼是自省?在日常生活中,自省 introspection 是一種自我檢查行為。在計算機程式設計中,自省是指這種能力 檢查某些事物以確定它是什麼 它知道什麼以及它能做什麼。自省向程式設計師提供了極大的靈活性和控制力。說的更簡單直白一點 自省就是物件導向的語言所寫的程式在執行時,能夠知道物件的型別。簡...

python自省函式的總結 原始碼剖析

內建函式 getattr setattr delattr hasattr getattr object,name 確實和object.name是一樣的功能,只不過這裡可以把name作為乙個變數去處理 import statsout 乙個模組支援多種不同格式的列印,根據傳入的formate引數的不同,...