自学内容网 自学内容网

__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

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


原文地址:https://blog.csdn.net/ningyanggege/article/details/135861902

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!