猿问

大神你在哪里?快来救救我!!!

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#这里就会报错?又是为什么?


asdhjhg
浏览 1224回答 1
1回答

asd8532

双下划线开头其实只是一种让程序员遵守的命名规范。其中的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
随时随地看视频慕课网APP

相关分类

Python
我要回答