Python三中下划线命名方式

文章摘要

Bpple-GPT

Python三中下划线命名方式

在 Python 中,_____xx__ 都用于变量或方法的命名

1. 单下划线 _

  • 命名惯例:单下划线开头的变量通常用于指示“该变量是内部使用的”。
  • 用途:并没有特别的语言限制,仅作为一种命名惯例,提醒使用者该变量是内部的或不重要的。
    • **例如,在模块或类中定义 **_var 表示这是一个内部变量,调用时不建议直接访问。
  • 交互式模式下的 _:在交互式模式下,单独的 _ 代表上一次计算的结果。

2. 双下划线开头 __

名称改编只会在类内使用双下划线的变量或方法时发生。在类外部(例如全局变量)使用双下划线前缀并不会触发改编,且 Python 社区不鼓励在类外部使用双下划线开头的命名方式。

  • 用途:用于类中表示“名称改编”(name mangling),避免子类覆盖。例如,__var 会在类定义时被改编为 _ClassName__var
  • 作用:可以帮助避免属性名在继承时被意外覆盖。通常用于不希望被外部或子类直接访问的私有属性或方法。

示例:

 class MyClass:
     def __init__(self):
         self.__private_var = 42
 ​
 obj = MyClass()
 print(obj.__private_var)  # AttributeError: 'MyClass' object has no attribute '__private_var'
 print(obj._MyClass__private_var)  # 42,可以通过改编后的名字访问

我的尝试:

 class Phone:
     def __init__(self):
         self.__brand = 'Huawei Mete 70'
         self.__price = 8888
 ​
 obj = Phone()
 print(obj.__dict__)  # {'_Phone__brand': 'Huawei Mete 70', '_Phone__price': 8888}
 print(obj._Phone__price)  # 8888
 print(obj.__price)  # AttributeError: 'Phone' object has no attribute '__price'
 print(obj.__brand)  # AttributeError: 'Phone' object has no attribute '__brand'

__dict__ 是 Python 中的一个内置属性,用于存储对象的所有可访问属性及其对应的值。这个属性以字典的形式返回对象的实例属性及它们的当前值。

3. 双下划线包裹 __xx__

  • 用途:这种命名方式用于 Python 的特殊方法或“魔术方法”。
  • 作用:它们是 Python 的内置方法,用于实现一些特殊功能,比如 __init__ 表示初始化方法,__str__ 表示转换为字符串的方法等。
  • 不建议自己创建:开发者不应自行创建这样的名称,以避免与 Python 内置方法冲突。

示例:

 class MyClass:
     def __init__(self, value):
         self.value = value
 ​
     def __str__(self):
         return f"MyClass with value: {self.value}"
 ​
 obj = MyClass(10)
 print(obj)  # 调用 __str__ 方法,输出 "MyClass with value: 10"

总结

  • _:用于标记内部变量,或在交互式模式中表示上一个结果。
  • __:用于名称改编,避免属性在继承或子类化中被覆盖。
  • __xx__:特殊方法或魔术方法,用于实现 Python 中的特殊行为和操作。

用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

BX33661

isfp 探险家

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。


目录

欢迎来到Bpple的站点,为您导航全站动态

65 文章数
20 分类数
44 评论数
15标签数
最近评论
bpple

bpple


一切顺利

fetain

fetain


good luck

bx

bx


good luck

热门文章

Emoji收集

2024-11-01

551
Hello Halo

2024-10-30

532
本地部署LLM

2024-08-22

511
Uptime Kuma

2024-11-29

507
241

访问统计