在Python中,使用一个下划线(_两个下划线(__来表示私有属性

1、一个下划线

        一个下划线的属性名(例如 _x)表示这个属性是受保护的,应该被视为私有属性,尽管它仍然可以被类的实例直接访问。受保护的属性被视为仅供内部使用,并且应该被子类和外部代码视为不可访问的。但是,它们可以被子类和外部代码直接访问

2、两个下划线

         两个下划线的属性名(例如 __x)表示这个属性是真正的私有属性。这意味着在类的外部无法直接访问该属性,甚至子类也不能访问它。Python会自动将这个属性名重命名为 _classname__x 的形式,以避免命名冲突。

3、代码示例

class MyClass:
    def __init__(self):
        self.public_attribute = "I am a public attribute"
        self._protected_attribute = "I am a protected attribute"
        self.__private_attribute = "I am a private attribute"

    def print_attributes(self):
        print(self.public_attribute)
        print(self._protected_attribute)
        print(self.__private_attribute)


obj = MyClass()

# Accessing public attribute
print(obj.public_attribute)

# Accessing protected attribute
print(obj._protected_attribute)

# Accessing private attribute using its mangled name
print(obj._MyClass__private_attribute)

# Printing all attributes using method
obj.print_attributes()

# Accessing private attribute
# This will raise an AttributeError
print(obj.__private_attribute)

 输出结果

I am a public attribute
I am a protected attribute
I am a private attribute
I am a public attribute
I am a protected attribute
I am a private attribute
AttributeError: 'MyClass' object has no attribute '__private_attribute'

        可以看到,Python中使用下划线双下划线来表示不同级别的属性访问限制。在使用时,应该遵循一定的规范和约定,以便代码能够更加清晰和易于维护。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐