Dan*_*aro 3 python introspection
def is_unbound_method(func):
pass
def foo(): pass
class MyClass(object):
def bar(self): pass
Run Code Online (Sandbox Code Playgroud)
我可以把什么在体内is_unbound_method,使
is_unbound_method(foo) == False
is_unbound_method(MyClass().bar) == False
is_unbound_method(MyClass.bar) == True
Run Code Online (Sandbox Code Playgroud)
??
未绑定的方法__self__设置为None:
def is_unbound_method(func):
return getattr(func, '__self__', 'sentinel') is None
Run Code Online (Sandbox Code Playgroud)
演示:
>>> foo.__self__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute '__self__'
>>> is_unbound_method(foo)
False
>>> MyClass.bar.__self__
>>> is_unbound_method(MyClass.bar)
True
>>> MyClass().bar.__self__
<__main__.MyClass object at 0x106c64a50>
>>> is_unbound_method(MyClass().bar)
False
Run Code Online (Sandbox Code Playgroud)
该属性也可用.im_self,但是__self__向前兼容.
请注意,在Python 3中,未绑定的方法已经消失; access MyClass.bar返回函数对象.因此,上述功能将始终返回False.
参见数据模型文档,在用户定义的方法部分中:
特殊的只读属性:
im_self是类实例对象,im_func是函数对象[...]
改变在2.6版本:对于Python 3向前兼容,
im_func也可作为__func__和im_self作为__self__.[...]
通过从类中检索用户定义的函数对象来创建用户定义的方法对象时,其
im_self属性为None,并且方法对象被称为未绑定.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |