Python 私有化机制与命名规则详解

温以宁
温以宁
发布时间:2026-10-13 | 3人浏览过
原创

本文深入解析Python中的私有化操作机制,详细阐述单下划线与双下划线在变量及方法命名中的具体差异。重点介绍通过名字重整(name mangling)机制访问私有属性的原理,以及子类继承时的行为表现。结合完整代码示例,说明如何在实际开发中规范使用私有成员,避免命名冲突并实现封装。

Python私有化机制概述

本文通过具体实例分析Python语言中的私有化操作机制,旨在帮助开发者深入理解相关概念并提供参考。

Python命名规则详解

私有化

在Python中,不同的前缀或后缀下划线定义了变量的可见性与访问权限: xx:表示公有变量,可在类内外自由访问。 _x:单前置下划线表示私有化属性或方法。使用 from somemodule import * 语句时不会导入此类成员,但类对象及其子类仍可访问。 _xx:双前置下划线用于避免与子类中的属性命名发生冲突。由于触发了名字重整机制,该类成员无法在外部直接通过常规方式访问。 __xx__:双前后下划线通常保留给Python解释器的魔法对象或特殊属性(如 __init__、__str__ 等)。开发者应避免自定义此类命名,以免与内置机制冲突。 xx_:单后置下划线主要用于避免与Python关键字或保留字发生命名冲突。

对于以双下划线开头的私有成员,Python通过名字重整(name mangling)机制进行访问控制。该机制旨在防止子类意外重写基类的方法或属性。重整后的名称格式通常为 _Class__object,通过这种变形后的名称,可以在类外部间接访问所谓的“私有”成员。

私有化代码实现与测试


#coding=utf-8
class Person(object):
  def __init__(self, name, age, taste):
    self.name = name
    self._age = age 
    self.__taste = taste
  def showperson(self):
    print(self.name)
    print(self._age)
    print(self.__taste)
  def dowork(self):
    self._work()
    self.__away()
  def _work(self):
    print('my _work')
  def __away(self):
    print('my __away')
class Student(Person):
  def construction(self, name, age, taste):
    self.name = name
    self._age = age 
    self.__taste = taste
  def showstudent(self):
    print(self.name)
    print(self._age)
    print(self.__taste)
  @staticmethod
  def testbug():
    _Bug.showbug()
# 模块内可以访问,当from cur_module import *时,不导入
class _Bug(object):
  @staticmethod
  def showbug():
    print("showbug")
s1 = Student('jack', 25, 'football')
s1.showperson()
print('*'*20)
# 无法访问__taste,导致报错
# s1.showstudent() 
s1.construction('rose', 30, 'basketball')
s1.showperson()
print('*'*20)
s1.showstudent()
print('*'*20)
Student.testbug()

子类继承与访问限制总结

总结

关于父类与子类在私有成员处理上的行为: 若父类中属性名以双下划线开头(__名字),子类不会继承该属性,且无法直接访问。 若在子类中向 __名字 赋值,这将在子类中创建一个与父类同名但独立的新属性,而非覆盖父类成员。 以单下划线开头(_名)的变量、函数或类,在使用 from xxx import * 语句导入模块时,默认不会被导入。

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表