为了账号安全,请及时绑定邮箱和手机立即绑定

如下代码,我在最后是修改了类属性 还是定义了一个变量???


class Person(object):


    __count = 0


    def __init__(self, name):

        Person.__count=Person.__count+1

        self.name =name

        print Person.__count


p1 = Person('Bob')

p2 = Person('Alice')


Person.__count=5

print Person.__count


正在回答

4 回答

在python机制内,Python解释器自动把class内部的__count变成了_Person__count

Person.__count=5 的时候,python认为你又给类定义了一个__count新变量,和原有的那个私有变量__count系统认为是两个不同的变量


0 回复 有任何疑惑可以回复我~

说实话,你这就不是一个问题

Person.__count=5 就是将原来的__count变为5啊,

按照顺序输出1,2,5

0 回复 有任何疑惑可以回复我~
#1

历练后的飞翔

双下划线的属性是不能被访问的,为什么还能输出呢?
2016-04-11 回复 有任何疑惑可以回复我~

class Person(object):

    __count = 0

    def __init__(self, name):

        Person.__count=Person.__count+1

        self.name =name

        print Person.__count

p1 = Person('Bob') #1

p2 = Person('Alice') #2

Person.__count=5  

print Person.__count   #5

p3 = Person('ooo')      #3  还是没有变化

print ', '.join(['%s:%s' % item for item in Person.__dict__.items()])

#__count:5, __module__:__main__, _Person__count:3, __dict__:<attribute '__dict__' of 'Person' objects>, __weakref__:<attribute '__weakref__' of 'Person' objects>, __doc__:None, __init__:<function __init__ at 0x013A8830>

#看到2个属性__count:5, _Person__count:3,想必楼主明白了:)

1 回复 有任何疑惑可以回复我~

应该是定义了一个变量,否则

p1 = Person('Bob')

Person.__count=5

p2 = Person('Alice')

print Person.__count

的输出应该变为1,6,7吧!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

如下代码,我在最后是修改了类属性 还是定义了一个变量???

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信