先从最初的问题开始说起,在Python中,凡是符合(类).(名称)为callable的,例如B.myfunc,都可以叫做method。如果B有个实例b,则它们都可以通过b.myfunc()的形式来调用。有的时候,如果b的某个成员为callable,但不是来自类B,也可以认为形式上是一个method,可以理解为一种假的method,这里暂不包括在内。 nethod的区别在于它们响应__get__的方式。完全不响应的是staticmethod,通过实例调用时没有额外参数;附加类为参数的叫classmethod,不仅可以通过b.myfunc()调用,B.myfunc()也会自动加上类作为参数。最后最常见的也就是instancemethod,从实例调用时自动附近实例作为第一个参数。 系统库这里是使用instancemethod的等价形式调用,这没有问题,因为语法规定__exit__本就应该是instancemethod,而你的__exit__是个boundmethod,不支持__get__,实际相当于staticmethod,自然就不匹配了,使用with不报错只是这一版实现偶然支持而已。
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。