python callable學習記錄
阿新 • • 發佈:2019-07-17
callable(object):如果引數object是可呼叫的,返回True,否則返回False。如果返回真,呼叫仍可能會失敗;但如果返回假,則呼叫object必定失敗。呼叫類是可呼叫的(呼叫類會返回一個新的例項)。如果例項的類有__call__()方法,則它是可呼叫的。如下栗子中,展示了四種情況:
- 呼叫一個常量,則返回False
- 呼叫自身函式,返回True
- 呼叫類,如果該類實現了回撥方法,則返回True
- 呼叫子類例項物件,則返回True,繼承關係,其父類實現了__call__()方法
def is_callback(func): if callable(func): print(func, "is callable") else: print(func, "is not callable") class A: def __init__(self, value): self.value = value def modify_attr(self, value): self.value = value class B(A): def __init__(self): pass def __call__(self, value): return value class C(B): def __init__(self, val): self.val = val def print(self, val): self.val = val print(self.val) print(" is callable?") a = A(2) b = B() c = C(2) is_callback(0) is_callback("String") is_callback(callable) is_callback(list) is_callback(is_callback) is_callback(a) is_callback(b) is_callback(c)
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 /Users/fxl/PycharmProjects/BERT-train2deploy/test/callback/test_callback.py
0 is not callable
String is not callable
<built-in function callable> is callable
<class 'list'> is callable
<function is_callback at 0x1035601e0> is callable
<__main__.A object at 0x1035f9320> is not callable
<__main__.B object at 0x103603400> is callable
<__main__.C object at 0x103acbd68> is callable
Process finished with exit code 0