当前位置: 首页 > 图灵资讯 > 行业资讯> 为什么Python必须在方法定义和调用中显式使用“self”?

为什么Python必须在方法定义和调用中显式使用“self”?

来源:图灵python
时间: 2025-02-09 17:51:28

为什么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视频教程!!