python---Python中的callable函数
转⾃:
python trunc函数
Python中的callable 函数
callable 函数, 可以检查⼀个对象是否是可调⽤的 (⽆论是直接调⽤或是通过 apply). 对于函数, ⽅法, lambda 函式, 类, 以及实现了 _ _call_ _⽅法的类实例, 它都返回 True.
def dump(function):if callable(function):print function, “is callable”else:print function, “is *not* callable”class A:def method(self, value):return valueclass B(A):def _ _call_ _(self, value):return valuea = A()b = B()dump(0) # simple objectsdump(”string”)dump(callable)dump(dump) # functiondump(A) # classesdump(B)hod)dump(a) # instancesdump(b)hod)0 is *not* callablestring is *not*
callable<built-in function callable> is callable<function dump at 8ca320> is callableA is callableB is callable<unbound hod> is callable<A instance at 8caa10> is *not* callable<B instance at 8cab00> is callable<hod of B instance at 8cab00> is callable注意类对象 (A 和 B) 都是可调⽤的; 如果调⽤它们, 就产⽣新的对象(类实例). 但是 A 类的实例不可调⽤, 因为它的类没有实现 _ _call_ _
⽅法.你可以在 operator 模块中到检查对象是否为某⼀内建类型(数字, 序列, 或者字典等) 的函数. 但是, 因为创建⼀个类很简单(⽐如实现基本序列⽅法的类), 所以对这些类型使⽤显式的类型判断并不是好主意.在处理类和实例的时候会复杂些. Python 不会把类作为本质上的类型对待; 相反地, 所有的类都属于⼀个特殊的类类型(special class type), 所有的类实例属于⼀个特殊的实例类型(special instance type).这意味着你不能使⽤ type 函数来测试⼀个实例是否属于⼀个给定的类; 所有的实例都是同样的类型! 为了解决这个问题, 你可以使⽤ isinstance 函数,它会检查⼀个对象是不是给定类(或其⼦类)的实例. Example 1-15 展⽰了 isinstance 函数的使⽤.
def dump(function):
if callable(function):
print function, “is callable”
else:
print function, “is *not* callable”
class A:
def method(self, value):
return value
class B(A):
def _ _call_ _(self, value):
return value
a = A()
b = B()
dump(0) # simple objects
dump(”string”)
dump(callable)
dump(dump) # function
dump(A) # classes
dump(B)
hod)
dump(a) # instances
dump(b)
hod)
0 is *not* callable
string is *not* callable
<built-in function callable> is callable
<function dump at 8ca320> is callable
A is callable
B is callable
<unbound hod> is callable
<A instance at 8caa10> is *not* callable
<B instance at 8cab00> is callable
<hod of B instance at 8cab00> is callable
注意类对象 (A 和 B) 都是可调⽤的; 如果调⽤它们, 就产⽣新的对象(类实例). 但是 A 类的实例不可调⽤, 因为它的类没有实现 _ _call_ _ ⽅法.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。