__name__是私有属性吗
一、原理
在Python中,属性和方法名称前面带有双下划线()通常表示"私有",但是这种说法并不完全准确。实际上,双下划线前缀在Python中触发了一个名称改编(name mangling)的特性,这是为了避免子类中的名称与超类中的名称冲突。而对于特殊的方法和属性,比如__init、name、__dict__等,它们并不是私有的,而是被称为"特殊方法"或"魔术方法"。
二、应用场景
特殊方法__name__是类和函数对象的一个内置属性,用于存储类或函数的名称:
- 当__name__属性用于类对象时,它存储了类的名称。
- 当__name__属性用于模块对象时,如果模块是被直接运行的主程序,它的值将是’main’;如果模块是被导入的,它存储了模块的名称。
- 当__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)!