为什么Python必须在方法定义和调用中显示“为什么Python必须使用”self”?
借鉴这个想法 Modula-3 语言。由于各种原因,它被证明是非常有用的。
首先,更明显的是,使用方法或实例属性而不是局部变量。
阅读self.x或self.meth()可以清楚地表明,即使你不知道类的定义,你也会使用实例变量或方法。
在 C++ 在中间,可以通过缺少局部变量声明来判断(假设全局变量罕见或易于识别) —— 但是在 Python 没有局部变量声明,因此必须找到类定义才能确定。
一些 C++ 和 Java 编码标准要求实例属性具有m_前缀,因此这种显式在这些语言中仍然有用。
其次,这意味着如果要引用显式或从特定类别中调用该方法,则不需要特殊语法。
在 C++ 如果你想在衍生类中重写基类,你必须使用它::运算符 -- 在 Python 您可以编写baseclasss.methodname(self, <argumentlist>)。
这对于__init__()方法非常有用,尤其是当派生方法想要扩展同名的基类方法时,必须以某种方式调用基类方法。
最后,解决了变量赋值的语法问题:
为了 Python 局部变量(根据定义!)在函数体中赋值的变量(未明确声明为全局)必须以某种方式告诉解释器,赋值是分配实例变量而不是局部变量,最好通过语法实现(出于效率原因)。
C++ 这是通过声明来实现的,但是 Python 遗憾的是,没有声明只是为了这个目的而引入它们。
使用显式self.var很好地解决了这个问题。类似地,使用实例变量必须编写self.var意味着引用方法内部的非限定名称不需要搜索实例目录。
换句话说,局部变量和实例变量存在于两个不同的命名空间中,你需要告诉我 Python 使用哪个命名空间。
更多Python问答知识,请关注Python视频教程!!