回复“Go语言”即可获赠从入门到进阶共10本电子书 一、前言在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 二、案例分析以Teacher类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性。
运行结果: 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线。 在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,Teacher把Teacher类改一改:
改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.name和实例变量.score了:
注: 就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。 但是如果外部代码要获取name和score怎么办?可以给Teacher类增加get_name和get_score这样的方法:
如果又要允许外部代码修改score怎么办?可以再给Teacher类增加set_score方法。
原先那种直接通过bart.score = 59也可以修改啊,为什么要定义一个方法大费周折?因为在方法中,可以对参数做检查,避免传入无效的参数:
在Python中,变量名类似xxx的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用name、score这样的变量名。 Teacher会看到以一个下划线开头的实例变量名。 比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当Teacher看到这样的变量时。
代码解析: 双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问name是因为Python解释器对外把name变量改成了_Teacher_name。 所以,仍然可以通过_Teacher_name来访问__name变量。 “虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。 三、总结本文基于Python基础。介绍了在类中,变量访问限制。通过案例的分析,在实际应用需要注意的点,遇到的问题,提供有效的解决方案。 欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。 使用Python语言,能够让读者更好的理解。代码很简单,希望对你学习有帮助。 ------------------- End -------------------
|
|