Select Language

AI社区

AI技术百科

7.9、Python类的私有属性

在 C++ 和 Java 中,属性(成员)有访问控制,如 public 表示任意代码可以访问该属性,private 表示仅当前类的代码才可以访问该属性。

Python 中没有这个访问控制符,但是可以在属性前面加上 __ 两个下划线来表示该属性不能在类外部访问。一般的属性都是可以在类的外部访问的,但是以两个下划线(__)开头的属性是不能在类的外部访问的。

下面的例子演示了这个情况:

>>> class Student:                     # 定义一个类
...   __version = "1.0"                # 私有的属性
...   version = "1.1"                  # 普通的属性
...                                    # 类属性定义完毕
...   def __init__(self):              # 初始化函数
...     self.__private_attr = 88       # 定义了一个私有的属性__private_attr
...     self.private_attr = 89         # 定义了一个普通的属性private_attr
...                                    # 类定义结束
>>> Student.version                    # 查看类属性
'1.1'
>>> Student.__version                  # 私有的类属性是不能访问的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class Student has no attribute '__version'
>>> student_obj1 = Student()           # 创建一个类实例对象
>>> student_obj1.version               # 查看普通属性
'1.1'
>>> student_obj1.__version             # 查看私有属性,抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Student instance has no attribute '__version'
>>> student_obj1.private_attr          # 查看普通属性
89
>>> student_obj1.__private_attr        # 查看私有属性,抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Student instance has no attribute '__private_attr'


我要发帖
Python类和对象
2021-12-10 23:41:03加入圈子
  • 10

    条内容
前面章节介绍了 Python 预定义的数据类型,如列表、字典等。但如果希望定义自己的类型,就需要使用到类。也就是说,通过类可以定义自己的类型,从而可以不仅仅使用系统定义的类型。
类在面向对象编程中是很基础的概念,其最基本的功能就是创建新的数据类型,另外还有继承功能,就是可以从一个类 A 派生出一个新的类 B,且类 B 会继承类 A 的所有属性。
本章介绍类和定义和使用,包括讲解类的属性和方法、类的派生方法、多重派生的使用等内容。