Python学习笔记(十三)访问限制

外部代码还是可以自由地修改一个实例的name、score属性

实例的变量名如果以__开头,就变成了一个私有变量(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))

如果又要允许外部代码修改score怎么办?可以再给Student类增加set_score方法:

class Student(object):

...

    def set_score(self, score):

        self.__score = score


>>> bart = Student('Bart Simpson', 98)

>>> bart.get_name()

'Bart Simpson'

>>> bart.__name = 'New Name' # 设置__name变量!

>>> bart.__name

'New Name'

表面上看,外部代码“成功”地设置了__name变量,但实际上这个__name变量和class内部的__name变量不是一个变量!内部的__name变量已经被Python解释器自动改成了_Student__name,而外部代码给bart新增了一个__name变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容