美文网首页
bound method/unbound method/func

bound method/unbound method/func

作者: 冯斯特罗 | 来源:发表于2017-05-03 14:01 被阅读17次
class _C:
    def _m(self): pass

c = _C()
c._m
<bound method _C._m of <__builtin__._C instance at 0x0383C440>>    
_C._m
<unbound method _C._m>
_C.__dict__['_m']
<function _m at 0x0394D770>
==========================================
type(_C.__dict__['_m'])
<type 'function'>
type(_C._m)
<type 'instancemethod'>
type(c._m)
<type 'instancemethod'>
==========================================
func
<unbound method GeneratorContextManager.__init__>
func.im_func
<function __init__ at 0x033F7F70>
func.im_self is None
True # 因为这是一个unbound method
func.im_class
<class 'contextlib.GeneratorContextManager'>

实际上类的方法都会被转换为非数据型描述符

def demo_function(*args,**kwargs):
    print args,kwargs

class FooClass(object):
    def demo_method(self):
        pass

    demo_method2 = demo_function

foo_instance = FooClass()

print FooClass.__dict__['demo_method2']() #什么输出都没有
print FooClass.demo_method2() # 报错TypeError: unbound method demo_function() must be called with FooClass instance as first argument (got nothing instead)也就是说,python回去检查第一个参数是什么
print FooClass.demo_method2(foo_instance )
print foo_instance.demo_method2()

相关文章

网友评论

      本文标题:bound method/unbound method/func

      本文链接:https://www.haomeiwen.com/subject/ymiktxtx.html