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

定义私有类属性的问题

#coding:utf-8

class Person(object):

    __score=0


    def __init__(self, name, score):#实例初始化

        self.name=name

        Person.__score=score#传给类的私有属性


    def get_grade(self):

        if Person.__score>=90:

            return 'A'

        elif Person.__score>=60:

            return 'B'

        else:

            return 'C'


p1 = Person('Bob', 90)

p2 = Person('Alice', 65)

p3 = Person('Tim', 48)


print p1.get_grade()

print p2.get_grade()

print p3.get_grade()

请问下为什么最后全部输出了c呢???有点摸不着头脑

正在回答

3 回答

执行 p3 = Person('Tim',48) 这段代码时,覆盖了类属性Person.__score的值,所以全部变成了c

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

Stick_To_It坤1 提问者

非常感谢!
2017-10-03 回复 有任何疑惑可以回复我~

看了下, 原因是, 你在初始化函数(__init__())中通过:类对象初始化了类属性 ,这会全局修改该值。我猜你的想法让每个实例的score值不同,所以可以更改score为实例属性。ps:Python中类属性不同实例可共享,而像c++就不行了,每个实例都有类属性不同的副本。

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

梦里蓝天a

静态属性除外
2018-09-05 回复 有任何疑惑可以回复我~

你在 __init__中修改类属性 __score,每个实例的类属性都是同一个值啊,也就是最后赋的值

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

举报

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

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

进入课程

定义私有类属性的问题

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