知行编程网知行编程网  2023-01-12 18:00 知行编程网 隐藏边栏  9 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于为什么Python必须在方法定义和调用中显式使用“self”?的相关知识,希望可以帮到处于编程学习途中的小伙伴

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


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

这个想法是从 Modula-3 语言中借用的。由于多种原因,它已被证明非常有用。

首先,更明显的是你使用的是方法或实例属性,而不是局部变量。

阅读 self.x 或 self.meth() 可以清楚地知道使用实例变量或方法,即使你不知道类的定义。

在 C++ 中,你可以通过缺少局部变量声明来判断(假设全局变量很少见或易于识别)——但在 Python 中没有局部变量声明,因此你必须查找类定义才能确定。

某些 C++ 和 Java 编码标准要求实例属性具有 m_ 前缀,因此这种明确性在这些语言中仍然有用。

其次,这意味着如果你想显式引用或调用特定类的方法,则不需要特殊的语法。

在 C++ 中,如果要在派生类中使用在基类中重写的方法,则必须使用 :: 运算符——在 Python 中,你可以编写 baseclass.methodname(self, <argumentlist>) 。

这对于 __init__() 方法很有用,尤其是当派生类方法想要扩展同名的基类方法,但必须以某种方式调用基类方法时。


最后,它解决了变量赋值的语法问题:

对于 Python 中的局部变量(根据定义!)为在函数体中赋值的变量赋值(而不是显式声明为全局变量),有必要以某种方式告诉解释器赋值是赋值给一个实例变量而不是局部变量,最好在语法上实现(出于效率原因)。

C++ 通过声明来做到这一点,但是 Python 没有声明,仅仅为了这个目的而引入声明是一种耻辱。

使用明确的 self.var 可以很好地解决这个问题。类似地,对于使用实例变量,必须编写 self.var 意味着在方法中对非限定名称的引用不必搜索实例的目录。

换句话说,局部变量和实例变量存在于两个不同的命名空间中,你需要告诉 Python 使用哪个命名空间。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享