问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

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

发布网友 发布时间:2022-04-21 04:22

我来回答

1个回答

热心网友 时间:2022-06-17 23:15

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

这个想法借鉴了 Mola-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 使用哪个命名空间。

更多Python问答知识,请关注Python视频教程!!

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
围裙面料有哪些材质 围裙款式种类关于围裙款式种类 辉瑞、莫德纳和强生计划推出 RSV 疫苗,年内或将向监管机构 Pfizer/BioNTech新冠mRNA疫苗选择了BNT162b2启动临床2/3期 辉瑞新冠疫苗什么技术 美国辉瑞预防什么 免责条款的意思是什么? 微电子专业的女生就业前景如何? 土建工程清包五项是什么 在工地承包五项、具体的都应该干些什么 python如何计算a的b方? Python中列表的方法有什么? Python可以用在哪些方面 看看你知道几个 护发精油作用 护发精油的使用方法有哪些 护发精油有什么作用 护发精油的正确使用方法是什么? 护发精油的使用步骤 护发精油到底有啥用? 南京的军校有哪些 南京炮兵学院文凭学信网如何查 头发精油怎么用 南京炮兵学院的详细地址以及邮政编码 护发精油有什么用 南京南站怎么去南京炮兵学院? 《十年》txt全集下载 [军校生招生手册]*炮兵学院简介 南京炮兵学院的成人教育毕业证书,国家承认这个学历吗? 南京炮兵学院是怎么样的学校? 南京炮兵学院是个什么学校!要详细点 python方括号的使用 防疫手抄报里面的内容怎么写 防疫有我手抄报内容怎么写 以疫情为题的手抄报用什么标题好? 读书小报 关于疫情的字怎么写 防疫卫生手抄报内容怎么写 关于抗击疫情预防新冠的手抄报创作理念阐述怎么写? 怎么换病毒手抄报还写字紫 手抄报上面太空了可以加什么点缀 七律长征的意思短一点 七律长征全诗的意思 《七律长征》的诗意是什么? 七律长征的全部详细的意思是什么? (七律 长征)全诗解释 七律长征这首诗的意思。 七律·长征全诗意思? 七律长征的意思30字 七律长征的意思20字 七律长征的意思 七律长征这首诗的意思是什么?
  • 焦点

最新推荐

猜你喜欢

热门推荐