Python教程:Python3中_和的用法和区别

_ 的含义在python的类中没有真正的私有属性或方法,没有真正的私有化。但为了编程的需要,我们常常需要区分私有方法和共有方法以方便管理和调用。那么在Pytho

大家好,今天给各位分享Python教程:Python3中_和的用法和区别的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

但出于编程的需要,我们常常需要区分私有方法和公共方法,以方便管理和调用。那么如何在Python中做到这一点呢?

一般来说,Python 约定带有下划线_ 的属性和方法是私有方法或属性,以表明该属性和方法不应该被外部调用,也不会从ModuleA import * 中导入。如果实际调用的话,不会报错,但是不符合规范。

以下代码演示了带有_ 的方法及其在类外部的可访问性。

class TestA: def _method(self): print(‘我是一个私有函数。’) def method(self): return self._method()ca=TestA()ca.method() 输出:

我是一个私人职能。 TestA 类中定义了_method 方法。按照约定,不能在类外直接调用。为了在外部使用_method方法,还定义了一个method方法,method方法调用_method方法。

但我们应该记住的是,添加_ 的方法也可以在类外部调用:

ca._method() 输出:

Python教程:Python3中_和的用法和区别

我是一个私有函数.__ 的意思

Python中的__与一种称为name mangling的技术有关,name mangling(也称为名称修饰)。在许多现代编程语言中,该技术用于解决由于需要唯一名称而引起的问题,例如命名冲突/重载等。

Python之所以以双下划线开头,是为了防止子类重写属性方法。在类实例化时自动转换,并在类中以双下划线开头的属性方法前添加“_类名”。

class TestA: def __method(self): print(‘这是类TestA 的方法’) def method(self): return self.__method()class TestB(TestA): def __method(self): print(‘这是一个来自类TestB’)ca=TestA()cb=TestB()ca.method()cb.method() 的方法输出结果:

这是来自类TestA 的方法这是来自类TestB 的方法在类TestA 中,由于name mangling 技术,__method 方法实际上会自动转换为_TestA__method,因此A 中的method 方法返回_TestA__method,而TestB 作为TestA 的子类只重写__method方法,不重写method方法。因此,当调用B中的method方法时,仍然会调用_TestA__method方法。

注意:A中没有__method方法,只有_A__method方法,外部也可以直接调用,所以python中并没有真正的私有化

__method()方法不能直接调用,需要调用转换后的方法

Python教程:Python3中_和的用法和区别

ca.__method() 输出:

回溯(最近一次调用最后): 文件“stdin”,第1 行,在moduleAttributeError:“TestA”对象没有属性“__method”转换后的方法名称为:_TestA__method

ca._TestA__method() 输出:

这是TestA 类的方法

重写TestB中的method方法:

class TestB(TestA): def __method(self): print(‘这是来自calss TestB 的方法’) def method(self): return self.__method()cb=B()cb.method() 输出:

这是来自类TestB 的方法现在TestB 中的方法方法将调用_TestB__method 方法:

用户评论

Python教程:Python3中_和的用法和区别
滴在键盘上的泪

一直对Python的下划线有点 confused,这篇教程讲得挺清楚的,终于搞懂了它们在代码中的作用!

    有14位网友表示赞同!

Python教程:Python3中_和的用法和区别
慑人的傲气

我是学C++出身的,习惯用大括号来表示代码块,突然发现Python下划线的作用就很有意思了,感觉它像是一行命令,很简洁高效。不过还是需要多练习才能熟练掌握。

    有10位网友表示赞同!

Python教程:Python3中_和的用法和区别
有恃无恐

这篇教程写的不错!终于明白为什么学习Python一定要搞懂下划线的用法了,它就像一个隐藏的语法规则,能帮助我们写出更美观的代码。建议添加一些实际案例,更容易理解。

    有13位网友表示赞同!

Python教程:Python3中_和的用法和区别
烟雨萌萌

python下划线可以用在变量命名和函数定义里?这个没想过,确实挺好用的,之前总觉得自己写的代码不够简洁啊。收藏这篇教程,以后遇到问题再来看!

    有13位网友表示赞同!

Python教程:Python3中_和的用法和区别
呆檬

Python中使用下划线的用途和区别真的太重要了,没有把握住这一点可能会写的代码很难理解。不过我还是不太懂为什么不用其他符号代替下划线?比如星号或者等号之类?

    有8位网友表示赞同!

Python教程:Python3中_和的用法和区别
巴黎盛开的樱花

这篇文章真是太棒了!我学Python的时候就一直对下划线的用法感到困惑,没想到这么深入的介绍竟然能在我脑海里一下子打开了一扇门。简直是新手福音!

    有14位网友表示赞同!

Python教程:Python3中_和的用法和区别
有你,很幸福

我感觉这篇教程还是比较浅显的,希望能加入更深入的讲解和例子,例如一些复杂的场景下的下划线使用以及不同类型的下划线的区别等等。

    有20位网友表示赞同!

Python教程:Python3中_和的用法和区别
北朽暖栀

下划线的用法确实很重要,但我觉得这篇文章有些啰嗦了。直接把重点内容说清楚就好了,何必浪费这么多篇幅?

    有7位网友表示赞同!

Python教程:Python3中_和的用法和区别
歆久

刚开始学Python的时候就觉得下划线是个奇怪的东西,一直没有认真去研究它到底有什么用。现在看来,学习这个语法规则还是很有必要的,至少能让我写出更规范的代码。

    有6位网友表示赞同!

Python教程:Python3中_和的用法和区别
迷路的男人

我一直在考虑用其他语言代替Python了,因为它的命名规则实在是太独特,感觉跟其他的语言完全不一样。希望Python能改一下下划线的使用规则,让它更容易上手。

    有8位网友表示赞同!

Python教程:Python3中_和的用法和区别
傲世九天

这段教程说的重点很清楚,就是下划线在Python中不是仅仅为了装饰使用的,它代表着语义,需要认真理解才能用好。太赞了!

    有6位网友表示赞同!

Python教程:Python3中_和的用法和区别
荒野情趣

之前学编程的时候以为下划线的用法就和一般的变量一样,现在才知道它的特殊含义,真是涨姿势了。看来以后写代码要更加注意使用了。

    有16位网友表示赞同!

Python教程:Python3中_和的用法和区别
孤街浪途

我更倾向于使用英文单词来表明变量的作用,感觉比下划线更容易理解,对于初学者来说至少不那么容易出错吧?

    有16位网友表示赞同!

Python教程:Python3中_和的用法和区别
冷风谷离殇

这篇教程确实很实用,让我彻底明白了如何在Python中正确使用下划线。原来它在函数和类的命名中也有特定的含义!以后我要记住这些知识点!

    有5位网友表示赞同!

Python教程:Python3中_和的用法和区别
琴断朱弦

看完这篇教程的我感觉自己的Python编程水平又提升了一层了! 下划线的用法太重要了,尤其是在阅读其他人的代码的时候,一定要注意它们的意思,避免理解错误。

    有5位网友表示赞同!

Python教程:Python3中_和的用法和区别
颜洛殇

其实我个人觉得下划线这种命名方式挺不错的,特别像一种隐藏的规则,让人更有探索精神。另外,这篇教程讲得也很全面,涵盖了不同类型的下划线的区别以及用法场景,学习起来很方便。

    有10位网友表示赞同!

Python教程:Python3中_和的用法和区别
安陌醉生

虽然Python的语法规则和其他的语言不太一样,但我已经习惯了它的特点,下划线也逐渐变成了我编程的一種习惯. 学习过程中遇到问题都能及时查阅教程,进步很快!

    有11位网友表示赞同!

Python教程:Python3中_和的用法和区别
寒山远黛

感觉这篇教程写的太详细了,有些内容我不常用到,反而浪费了一些学习时间。建议可以针对不同编程任务的需要,做些专门的讲解或者案例。

    有6位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/140302.html

Like (0)
小su的头像小su
Previous 2024年9月18日 下午8:52
Next 2024年9月18日 下午9:03

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注