Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28756
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 55
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 22:55
个人简介

do what you love

文章分类

全部博文(6)

文章存档

2014年(6)

我的朋友

分类: Python/Ruby

2014-05-09 16:46:00

看个例子:
class A(object):
       def __init__(self):
              self.__private()
              self.public()
       def __private(self):
              print 'A.__private()'
       def public(self):
              print 'A.public()'
class B(A):
       def __private(self):
              print 'B.__private()'
       def public(self):
              print 'B.public()'
b = B()
初探
正确的答案是:
A.__private()
B.public()

>>> print '/n'.join(dir(A))
B.public()
_A__private
__init__            
public
>>> print '/n'.join(dir(B))
_A__private
_B__private
__init__
public

私有变量会在代码生成之前被转换为长格式(变为公有)。转换机制是这样的:在变量前端插入类名,再在前端加入一个下划线字符。这就是所谓的私有变量轧压(Private name mangling)。如类A里的__private标识符将被转换为_A__private,这就是上一节出现_A__private和__private消失的原因了。

阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~