1. 程式人生 > >python callable學習記錄

python callable學習記錄

 callable(object):如果引數object是可呼叫的,返回True,否則返回False。如果返回真,呼叫仍可能會失敗;但如果返回假,則呼叫object必定失敗。呼叫類是可呼叫的(呼叫類會返回一個新的例項)。如果例項的類有__call__()方法,則它是可呼叫的。如下栗子中,展示了四種情況:

  1. 呼叫一個常量,則返回False
  2. 呼叫自身函式,返回True
  3. 呼叫類,如果該類實現了回撥方法,則返回True
  4. 呼叫子類例項物件,則返回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