python方法未绑定错误

相信 Python 程序员多多少少都和我同样遇到过 Method Unbound Error,直译过来就是 “方法未绑定错误”,虽然搜索以后知道了使用 @classmethod 这样的装饰起后就能够解决问题, 可是一直没有获得彻底解惑。程序员

咱们知道,Python 是一个动态语言,在类的建立过程当中甚至实例化之后都能动态地修改其方法、 属性,这种作法一般被称为“Monkey Patching”,虽然咱们并不提倡 MP,可是 Python 在建立类的过程当中确实就是基于相似原理进行的方法绑定,类方法的绑定一般是在 __new__ 中,咱们在建立元类时,一般也会覆盖该方法。函数

另外一个概念,也是在使用 Python 以前一直未能透彻理解的概念,“方法是一种特殊的函数”, 在这里明确无疑!对于通常的方法 normal_method(self, *args, **kwargs) 咱们一般都是在类中定义,而后在调用类的实例对象时动态地将对象自己做为做为第一个参数传入, 所以在调用没有声明 self 变量的方法时就会遇到这样的错误:code

class C:
    def normal_method():
        pass

# TypeError: normal_method() takes no arguments (1 given)

注意这里的 self 只是一个变量名的约定,你能够替换为任何非系统保留字。orm

这样的方法在定义的适合就依赖于实例对象了,也就是绑定在了实例对象上,然而实例化以前 方法并无 self 能够绑定,因而就会出现 Method Unbound Error。 相似的,类方法也是这样自动地将类对象传入方法的 Bound Method。那么 Python 是如何知道 何时传入实例对象,什么适合传递类对象的呢?答案就在这个 @classmethod 中。对象

除了上面实例方法和类方法两类 Bound Method,还有对应的 Unbound Method,也就是不须要 self 或者 cls 进行绑定的方法,这就是 static method,经过 @staticmethod 忽略掉 方法接受的第一个参数。class

相关文章
相关标签/搜索