思维导图
一、封装【private】
1.概念
广义的封装:函数和类的定义本身,就是封装的体现
狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的【只有当前类持有】,然后暴露给外界一个访问的方法即可【间接访问属性】
封装的本质:就是属性私有化的过程
封装的好处:提高了数据的安全性,提高了数据的复用性
2.属性私有化
如果想让成员变量不被外界直接访问,则可以在属性名称的前面添加两个下划线__,成员变量则被称为私有成员变量
私有属性的特点:只能在类的内部直接被访问,在外界不能直接访问
代码演示:
#1.属性不私有化的时候 class Person(): def __init__(self,name,age): self.name = name self.age = age def myPrint(self): print(self.name,self.age) #通过构造函数给属性赋值 per = Person("张三",10) per.myPrint() #张三 10 #通过对象直接访问属性,并且给属性赋值 per.name = "李四" per.age = 22 per.myPrint() #李四 22 #2.属性私有化 #写法:在属性的前面添加两个下划线 #用法:只能在类的内部被访问,外界不能直接访问 class Person1(): def __init__(self,name,age): self.name = name self.__age = age def myPrint(self): print(self.name,self.__age) p1 = Person1("abc",10) p1.myPrint() #abc 10 p1.name = "hello" #其实动态绑定属性,age和__age其实是两个不同的变量 p1.age = 222 p1.myPrint() print(p1.age) #AttributeError: 'Person1' object has no attribute '__age',私有化了,在外界不能直接访问 #print(p1.__age)
3.get函数和set函数
get函数和set函数并不是系统的函数,而是自定义的,为了和封装的概念相吻合,起名为getXxx和setXxx
get函数:获取值
set函数:赋值【传值】
代码演示:
#3.get函数和set函数 class Person2(): def __init__(self,name,age): self.name = name self.__age = age #特殊情况一 self.__weight__ = 20.0 #特殊情况二 self._height = 155.0 def myPrint(self): print(self.name,self.__age) # 书写私有属性age的get函数和set函数【通过自定义的函数进行私有属性的赋值和获取值,暴露给外界】 """ get函数和set函数并不是系统的函数,而是自定义的,为了和封装的概念相吻合,起名为getXxx和setXxx get函数:获取值 set函数:赋值【传值】 """ #set函数:给成员变量赋值 #命名方式:setXxx #特点:需要设置参数,参数和私有成员变量有关 def setAge(self,age): #数据的过滤 if age < 0: age = 0 self.__age = age #get函数:获取成员变量的值 #命名方式:getXxx #特点:需要设置返回值,将成员变量的值返回 def getAge(self): return self.__age #注意:有几个私有属性,则书写几对get函数和set函数 p2 = Person2("abc",10) p2.myPrint() #abc 10 #print(p2.__age) #间接的访问了私有的成员变量 print(p2.getAge()) p2.setAge(22) print(p2.