登录
首页 >  文章 >  python教程

Python下划线属性:约定还是强制?

时间:2024-12-14 21:01:06 264浏览 收藏

golang学习网今天将给大家带来《Python下划线属性:约定还是强制?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习文章或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

Python下划线属性:约定还是强制?

Python 下划线属性的本质

在 Python 类中,属性名称以单下划线开头(如 _A)表示约定俗成的私有属性,而以双下划线开头(如 __B)的属性通常被认为是私有属性。

但是,你发现可以访问 _A,却无法访问 __B,并报错 "Unexpected System Error: 'A' object has no attribute ...."。这引发了一个疑问:下划线的前缀是否仅用于命名约定,还是实际发挥着作用?

双下划线属性的含义

双下划线前缀(如 __B) 实际上具有名为“Name Mangling”的附加特性。此特性在 Python 2.0 中引入,导致编译器将属性名称转换为不同的名称(通常为 _类__属性)。

Name Mangling 如何工作

对于 __B 属性,编译器会将其转换为 _A__B。虽然外部代码不可见,但仍可以通过此替代名称访问属性。换句话说,__B 仍然是“公有”属性,只是其名称被编译器更改。

约定俗成

因此,Python 中实际上并没有真正的属性可见性修饰符。下划线前缀只是约定俗成的指示,表示属性的私有性。但是,Name Mangling 仍然允许外部代码通过修改后的名称访问属性。

本篇关于《Python下划线属性:约定还是强制?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>