一.受保护参数

在 Python 中,有两种约定用于指示某个属性或方法是受保护的,即不应该被外部直接访问或使用。这些约定是:

  1. 单下划线前缀(_): 在属性或方法的名称前加上单个下划线,例如 _protected_variable_protected_method()。这个约定表示该属性或方法是受保护的,建议外部代码不要直接访问或使用它。虽然这只是一个约定,并没有真正限制外部代码的访问,但它向其他开发人员传达了一个警示,表明这是一个内部实现细节,可能会有变化。

  2. 双下划线前缀(__): 在属性或方法的名称前加上双下划线,例如 __private_variable__private_method()。这个约定表示该属性或方法是私有的,应该在类的内部使用,不应该被子类或外部代码直接访问。Python 使用名称修饰(name mangling)来对双下划线前缀进行变换,以避免与子类中相同名称的属性或方法冲突。例如,__private_variable 在类内部被转换为 _ClassName__private_variable

这些约定只是一种代码风格和最佳实践,而不是强制规定。在 Python 中,属性和方法的访问控制是基于约定和开发人员遵守的规则,而不是强制执行的。这是因为 Python 鼓励开放和动态的访问模式,依赖程序员的自律和团队的合作。
【Python系列】受保护属性-LMLPHP

二.如何访问

在 Python 中,__dict__ 是一个特殊属性,它是一个字典(dictionary),用于存储对象的属性和方法。该字典将对象的属性名作为键,对应的属性值作为值。

通过访问 __dict__ 属性,您可以获取对象的属性和方法字典,从而查看、修改或删除对象的属性和方法。这使得您可以动态地操作对象的属性,而不需要事先知道属性的名称。

虽然 __dict__ 是一个受保护的属性(以双下划线开头),但它仍然可以通过对象实例来访问。这是因为 Python 提供了一种特殊的机制,即当您通过点号(.)访问属性时,Python 解释器会自动查找对象的 __dict__ 属性来获取属性值。

需要注意的是,对于某些特殊类型的对象,如内置类型(built-in types)或扩展类型(extension types),它们可能不会具有 __dict__ 属性。这是因为这些对象的属性和方法可能是在底层实现中进行管理的,而不是存储在字典中。

__dict__ 属性提供了一种访问对象属性和方法的底层机制,但在正常情况下,我们通常不直接使用 __dict__ 来访问对象的属性。相反,我们应该使用常规的属性访问方式,以提高代码的可读性和可维护性。
【Python系列】受保护属性-LMLPHP

04-30 08:35