python的自省函式, 快速找出BUG的良器
python內建的好多自省函式, 合理使用可快速查詢相關提示, 快速找到問題點, 以下開始具體說明
1. dir() 列出物件的所有屬性和方法
如: dir(list) 可以列出列表的所有屬性和方法
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
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.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
6. 其餘的經常使用的還包括
type() 返回物件的型別
id() 返回物件的引用地址, 類似於 is , 可以檢視兩個變數的記憶體地址是否一樣