欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python单下划线和双下线的区别

程序员文章站 2022-03-09 09:33:54
...

一、简单说明

在学习Python的时候,会不理解为什么在方法(method)前面会加好几个下划线,有时甚至两边都会加。在C++的类中会定义中一些方法或属性会被定义成public、protected、private,而在Python中不是通过关键字进行定义,而是通过下划线和双下划线进行定义,同样实现具有 private 和 protected 类似的访问权限作用,下面我们具体分析。

Python主要存在四种命名:
(1)object #公用方法
(2)__object__ #内建方法,用户不要这样定义
(3)__object #全私有,全保护(private)
(4)_object #半保护(protected)

核心风格:避免用下划线作为变量名的开始。
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,如类的gouzao

二、举例说明

1、单下划线开头开头(protected变量)

单下划线开头的变量
“单下划线”开始的变量叫做保护变量,意思是只有类对象和子类对象能访问到这些变量

2、双下划线开头(private变量)

双下划线开头的变量
“双下划线”开始的变量叫做私有变量,意思是只有类本身能够访问达到这些变量,连子类对象也不能访问。

但是类的对象或者类的子对象想访问这些私有变量也是可以的,需要改变访问的的方式(但是一般不主张)
对象访问私有方法或属性:

对象名._类名__PrivateMethod()

class Foo():
  def __init__():
    ...

  def public_method():
    print 'This is public method'

  def __fullprivate_method():
    print 'This is fullprivate_method'

  def _halfprivate_method():
    print 'This is halfprivate_method'

  f = Foo()
  f.public_method() # OK
  f.__fullprivate_method() # Error occur
  f._halfprivate_method() # OK
  f._Foo__fullprivate_method() # OK