→ uranusjr: __dict__ 06/23 14:57
→ uranusjr: 漏看要對內建型別也有用, 這樣 global dir() 比較好 06/23 14:58
: 可是u大 dir後要怎樣過濾方法還是屬性呢
最正規的答案是沒有辦法, 因為 Python 沒有在分...
假設你有個 class 長這樣
class A:
def __init__(self):
self.x = 0
def f(self):
print('hi')
你可能會想說 x 是屬性, f 是方法
但事情並沒有這麼簡單
如果我這樣...
class A:
def __init__(self):
self.x = 0
self.y = self.f
def f(self):
print('hi')
那麼 y 是屬性嗎?但它和 f 的行為完全一樣
所以你根本分不出來...
所以你必須想好你真的想要的是什麼
如果你想知道的是「哪些屬性可以被呼叫」
那麼你可以用 callable() 函式
>>> a = A()
>>> callable(a.f)
True
>>> callable(a.x)
False
>>> callable(a.y)
True
如果你想知道哪些屬性是 function (不包含 class 和有定義 __call__ 的物件)
可以用 inspect.isfunction()
如果你想要知道哪些屬性是 method (只包含有 bound 到某個 instance 的 function)
那就用 inspect.ismethod()
還有一些其他微妙差異就交給你自己發現
另外如果你打算用 inspect
可以考慮搭配 inspect.getmembers() 的 predicate 省一些功夫