说在前面的一点:

python明明有私有的定义方法就是在变量或者方法的面前加上双下滑线__,这个实际上是python的伪私有。只是一种程序员约定俗称的规定,加了就表示私有变量,但是你如果要在外部调用的话,还是可以调用的。

Python并没有真正的私有化支持,但可用下划线得到伪私有

(1)_xxx      "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入

(2)__xxx    类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。)," 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。

(3)__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__() 代表类的构造函数。

class B:
def __init__(self):
self.__private = 0
self._private=1
def __private_method(self):
pass
def public_method(self):
pass
self.__private_method() b = B()
#print(b.__private) #双下划线,访问不到数据
print(b._private) #单下划线,可以访问到

还有注意的一点是,并不是说私有属性就不能被访问到,比如

class B:
def __init__(self):
self.__private1 = 100
self._private2=99
def __private_method(self):
pass
def public_method(self):
pass
self.__private_method() b = B()
#print(b.__private1) #双下划线,访问不到数据
print(b._private2) #单下划线,可以访问到
print(b._B__private1

私有变量:实例._类名__变量名
私有方法:实例._类名__方法名()

所以说这只是一种伪私有,只是一种程序员约定俗称的规定。

上面提到有两种不同的编码约定(单下划线和双下划线) 来命名私有属性,那么问题就来了:到底哪种方式好呢?大多数而言,应该让你的非公共名称以单下划线开头。但是,如果你清楚代码会涉及到子类,并且有些内部属性应该在子类中隐藏起来,那么才考虑使用双下划线方案。

最新文章

  1. 夜深了,写了个JQuery的省市区三级级联效果
  2. oracle性能优化之表设计
  3. FreeBSD pkg仓库有台湾的镜像了
  4. 【转】vim格式化C代码
  5. 阻塞队列LinkedBlockingQueue和并发队列ConcurrentLinkedQueue
  6. 软件设计之UML—UML中的六大关系
  7. 在类库项目中使用log4net(RollingFileAppender)记录日志
  8. Vijos 1100 (区间DP)
  9. YII2 Activedataprovider 类分页的使用
  10. Strom-7 Storm Trident 详细介绍
  11. Nginx/Apache日志分析脚本
  12. C# 刷新当前窗体
  13. 从文章"避免复制与粘贴"到文章"Extract Method"的反思(1)
  14. python logging模块使用
  15. 从零开始搭建Vue组件库——VV-UI
  16. 使用CloneDB克隆数据库
  17. SQL中的坑
  18. matlab中norm函数的用法
  19. 从url到请求 再到页面生成
  20. 16、Java并发编程:Timer和TimerTask

热门文章

  1. ADO.NET基础必备之SqlCommand.Execute三方法
  2. veeValidate
  3. bsxfun函数
  4. stm32的两种固件下载模式:JTAG和SWD
  5. 海盗船长小米首页小船来回摆动CSS3.0效果
  6. BZOJ3670 [Noi2014]动物园 【KMP计数】
  7. JavaScript如何获得input元素value的值
  8. java中静态变量与静态方法的继承(转)
  9. The Shortest Path in Nya Graph HDU - 4725
  10. c++11新特性之nullptr