类的私有变量外部不可访问举例

1.在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。

2.如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
 
    def print_score(self):
        print('%s: %s' % (self.name, self.score))
bart = Student('Bart Simpson', 98)
print(bart.name)
print(bart.score)
#打印结果:
#Bart Simpson
#98

3.改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了:

class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
 
    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))
print(bart.__name)
print(bart.__score)
#打印结果:报错
#--------------------------------------------------------------
#AttributeError                            Traceback (most #recent call last)
# in 
#      6     def print_score(self):
#      7         print('%s: %s' % (self.__name, self.__score))
#----> 8 print(bart.__name)
#      9 print(bart.__score)

#AttributeError: 'Student' object has no attribute '__name'

4.这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。但是如果外部代码要获取name和score,可以给Student类增加get_name和get_score这样的方法:

class Student(object):
    ...
    def get_name(self):
        return self.__name
 
    def get_score(self):
        return self.__score

你可能感兴趣的:(类的私有变量外部不可访问举例)