python——双下划线

一、名称修饰(Name Mangling)

在Python中,当你在一个类中定义一个方法,其名称以两个下划线 __ 开头但不以两个下划线结尾时(例如:__private_method),Python会对这个方法名进行名称修饰。名称修饰的实际效果是,该方法在类外部不能直接以其原始名称访问,而是被改写为 _ClassName__private_method 这样的形式。这种特性并不是为了创建真正的私有成员,而更多的是为了避免子类无意中覆盖父类的内部实现细节。然而,通过类的内部机制,还是可以访问到这些方法的。

例如:

class MyClass:
    def __private_method(self):
        print("This is a 'private' method.")

# 直接访问会出错
# my_class = MyClass()
# my_class.__private_method()

# 但实际上,仍可以通过名称修饰后的名称访问
my_class = MyClass()
my_class._MyClass__private_method()  # 输出: This is a 'private' method.

二、特殊方法(Magic Methods 或 Dunder Methods)

以双下划线前后各有两个下划线的方法,如 __init__, __str__, __eq__ 等,它们在Python中被称为特殊方法或者魔术方法。这些方法在特定的上下文环境中会自动调用,用来实现对象的核心功能和行为。

例如:

class Person:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"Person object: {self.name}"

p = Person("Alice")
print(p)  # 自动调用 __str__ 方法,输出:Person object: Alice

在这个例子中,__init__ 是构造方法,在创建Person对象时被调用;__str__ 方法则返回一个便于阅读的对象表示,当尝试打印对象或将其转换为字符串时会调用它。

三、系统定义的名字

某些以双下划线开头和结尾的名称,如 __file__, __name__, __doc__ 等,是Python中预定义的特殊属性,它们与模块或类的元信息相关,不由用户自定义,而是由Python解释器自动提供。

例如:

import sys

# 获取当前模块的文件路径
print(sys.modules[__name__].__file__)  # 输出当前执行文件的路径

# 获取模块/类的文档字符串
class MyClass:
    """这是一个示例类"""
    
print(MyClass.__doc__)  # 输出:这是一个示例类
  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值