python
主页 > 脚本 > python >

Python中私有属性“_“下划线和“__“双下划线区别

2023-03-10 | 佚名 | 点击:

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

1、一个下划线

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

2、两个下划线

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

3、代码示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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

原文链接:https://blog.csdn.net/qq_41619571/article/details/129381256
相关文章
最新更新