MST

星途 面试题库

面试题:Python类的属性访问控制

在Python中,如何定义一个类,使其部分属性只能在类内部访问,部分属性可在类外部访问?请举例说明,并解释这种访问控制机制的原理。
21.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

在Python中,通过在属性名前添加单下划线 _ 表示该属性为“受保护的”,理论上只应该在类内部或子类中访问;添加双下划线 __ 表示该属性为“私有”,会进行名称改写,使得在类外部无法直接访问。

示例代码如下:

class MyClass:
    def __init__(self):
        self.public_attr = "这是一个公共属性,可以在类外部访问"
        self._protected_attr = "这是一个受保护属性,理论上应在类内部或子类中访问"
        self.__private_attr = "这是一个私有属性,在类外部无法直接访问"

    def get_private_attr(self):
        return self.__private_attr
obj = MyClass()
print(obj.public_attr)
# 虽然理论上不应该在类外部访问受保护属性,但实际上还是可以访问的
print(obj._protected_attr)
# 下面这行代码会报错,无法直接访问私有属性
# print(obj.__private_attr)
# 可以通过类内部的方法来获取私有属性的值
print(obj.get_private_attr())

这种访问控制机制的原理:

  • 公共属性:没有任何特殊前缀,在类内部和外部都能自由访问。
  • 受保护属性:添加单下划线 _,这只是一种约定俗成的规范,提醒开发者此属性最好在类内部或子类中使用,但实际上在类外部仍可访问。
  • 私有属性:添加双下划线 __,Python会对其进行名称改写,将属性名变为 _类名__属性名 的形式,这样在类外部就无法通过原来的属性名直接访问,从而实现一定程度的“私有”效果。