类和实例-访问限制

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值