封装是面向对象三大核心中最核心的一个特性。
封装就是将类的某些属性隐藏起来,然后通过接口对外开放,但是在外部不能直接进行查找属性。
在类内部的变量属性或者函数属性名前加上两个下划线。就实现了对该属性的隐藏,此时,通过外界就查不到该属性。
# 属性的隐藏
class Student:
__school = "清华"
def __init__(self,name,age):
self.__name = name
self.__age = age
def tell_info(self):
print("学校:%s 姓名:%s 年龄:%s"%(self.__school,self.__name,self.__age))
stu_1 = Student("tom",18)
print(stu_1.__school) # 这种方法是查看不到该学校属性的。
print(stu_1._Student__school) # 采用_类__属性的方法就可以查看了。
stu_1.__handsome = "帅" # 定义完毕类之后在添加__属性,该属性是不会隐藏起来的。
通过上述的查看方式,就大概看出来,这个隐藏其实是一种变形,这个阶段主要发生在定义阶段,当执行类内部的代码时候,遇到__属性的方式就会将其变为_类__属性名的形式。这样我们就可以在外界通过这种形式调用查看该属性。
由于是在定义阶段发生的变形,因此,在外界我们在重新指定对象的属性的时候,是不会在发生变形的。
这种隐藏的方式并不是完全的没办法访问,但是如果你还想调用查看的话,请一开始就不要搞这种隐藏,多此一举。这种隐藏其内部是可以使用的,因为其内部在定义的时候都发生了转变,所以内部使用的方式也变成了_类__属性的方式。
那为什么要设置隐藏呢?
原文:https://www.cnblogs.com/liqianxin/p/12660160.html