class Teacher(object):
def __init__(self, name,score):
self.name = name
self.__score = score
w=Teacher('ab',22)
print w._Teacher__score #对于私有属性这样为什么就可以访问啊?还有一个问题class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
@property
def grade(self):
if score>=90:
return 'A'
elif score>=60:
return 'B'
return 'C'
s = Student('Bob', 59)
s.__score(1000)
print s.__score#这里可以正常打印1000,为什么?
s.score=1000
print s.score#这里就会报错?又是为什么?
1 回答
asd8532
TA贡献143条经验 获得超187个赞
双下划线开头其实只是一种让程序员遵守的命名规范。其中的w._Teacher__score 是python里私有变量轧压(Private name mangling)技术,可以访问私有变量,有人说是一种灵活的技巧,认识就可以了
def prin(self): print self.__score#定义一个输出__score的函数 s = Student('Bob', 59) s.__score=1000 print s.__score#我们以为已经修改了__score但事实上并没有,这个__score和我们的self.__score不是同一个 s.prin() #输出结果是,而不是2个1000 ##59
添加回答
举报
0/150
提交
取消