我是靠谱客的博主 正直跳跳糖,最近开发中收集的这篇文章主要介绍类和实例-访问限制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单说下实例中的成员变量的访问限制,先来定义一个类:

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self._age = age
        self.__score = score

    def print_score(self):
        print('%s今年%s岁,成绩是%s' % (self.name, self._age, self.__score))

    def set_student(self, ,name, age, score):
        self.name = name
        self._age = age
        self.__score = score

1,普通变量,可以使用外部代码和内部函数修改变量。上面的初始数据定义中name就是普通变量。

外部代码修改:

lily = Student('lily', 10, 90)
lily.name = 'lily sport'
lily.print_score()

运行结果:

lily今年10岁,成绩是90
lily sport今年10岁,成绩是90

可以看到直接修改了实例的变量name。

内部函数修改普通成员变量:
 

lily = Student('lily', 10, 90)
lily.print_score()
lily.set_student('lily meimei', 10, 90)
lily.print_score()

运行结果:

lily今年10岁,成绩是90
lily meimei今年10岁,成绩是90

2,如果不想让外部代码修改内部属性,在定义变量时以__两个下划线开始,变量就变成了private变量,即私有变量,只能实例内部的函数来访问,上面的定义中score就是这样的变量。外部代码想要访问内部属性时可以通过实例内的函数来获取变量。

lily = Student('lily', 10, 90)
lily.print_score()
lily.__score = 100
lily.print_score()

执行结果:

lily今年10岁,成绩是90
lily今年10岁,成绩是90

成绩并未修改。此时内部属性__score被改成了_Student__score,不同的python编译器会改成不同的名字,外部代码可以访问_Student__score来访问__score属性,如

lily = Student('lily', 10, 90)
lily.print_score()
lily.__score = 100
lily.print_score()
lily._Student__score = 100
lily.print_score()

运行结果:

lily今年10岁,成绩是90
lily今年10岁,成绩是90
lily今年10岁,成绩是100

可见通过修改_Student__score来修改了__score属性。那上面的lily.__score = 100是修改了什么呢,其实他是给实例绑定了一个新变量,名字是__score,它和class内部的__score变量不是一个变量。

3,上面定义的变量中还有一个变量是_age,它的含义是我可以允许外部代码访问,但是最后不要。

lily = Student('lily', 10, 90)
lily.print_score()
lily._age = 11
lily.print_score()

运行结果:

lily今年10岁,成绩是90
lily今年11岁,成绩是90

变量通过外部代码修改成功了

最后

以上就是正直跳跳糖为你收集整理的类和实例-访问限制的全部内容,希望文章能够帮你解决类和实例-访问限制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部