__name__是私有属性吗

一、原理

在Python中,属性和方法名称前面带有双下划线()通常表示"私有",但是这种说法并不完全准确。实际上,双下划线前缀在Python中触发了一个名称改编(name mangling)的特性,这是为了避免子类中的名称与超类中的名称冲突。而对于特殊的方法和属性,比如__initname、__dict__等,它们并不是私有的,而是被称为"特殊方法"或"魔术方法"。

二、应用场景

特殊方法__name__是类和函数对象的一个内置属性,用于存储类或函数的名称:

  1. 当__name__属性用于类对象时,它存储了类的名称。
  2. 当__name__属性用于模块对象时,如果模块是被直接运行的主程序,它的值将是’main’;如果模块是被导入的,它存储了模块的名称。
  3. 当__name__属性用于函数或方法对象时,它存储了函数或方法的名称。
    这些特殊属性是公开的,可以直接访问,不属于私有属性。

三、案例

以下是一个简单的例子,展示如何使用__name__属性:

def my_function():
    pass

class MyClass:
    def my_method(self):
        pass

print(my_function.__name__)  # 输出: my_function
print(MyClass.__name__)      # 输出: MyClass
print(MyClass().my_method.__name__)  # 输出: my_method

my_function
MyClass
my_method

另一个案例:

class MyClass:
    # ... 类的其他部分 ...

    def do_something(self):
        # ... 方法的实现 ...
        self.log_action()

    def log_action(self):
        print(f"Action performed by class {self.__class__.__name__}")

# 假设我们重命名了类
class MyRenamedClass(MyClass):
    pass
obj = MyClass()
obj.do_something() 
obj = MyRenamedClass()
obj.do_something()  

Action performed by class MyClass
Action performed by class MyRenamedClass

这个案例在实际工作会用得上!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值