print(hasattr(int, '__call__'))
print(hasattr(lambda x: x, '__call__'))
print('')
class A(object):
a = int
b = lambda x : x
print(A.a)
print(A.b)
结果
True
True
<type 'int'>
<unbound method A.<lambda>>
Python如何决定什么将成为一个方法(这里是A.b
)和什么将成为它自己(这里是A.a
)?你知道吗
Tags:
如果对象是函数(也就是说,它们的类型是
types.FunctionType
),那么它们就被包装到方法中。你知道吗这是因为函数类型定义了一个
__get__
方法,实现了descriptor protocol,它改变了查找A.b
时发生的情况。int
和大多数其他非函数可调用函数不定义此方法:您可以通过定义其他类型的描述符来创建自己的类似方法包装器的行为。一个例子就是
property
。property
是一种类型,它不是函数,但也定义了__get__
(和__set__
)来更改查找属性时发生的情况。你知道吗相关问题 更多 >
编程相关推荐