1. 程式人生 > >python的自省函數, 快速找出BUG的良器

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

\n lis key nac self instance reverse attr_ pop

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 , 可以查看兩個變量的內存地址是否一樣

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