面向对象三大特征之封装
一:组合
组合:组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象(多个对象放在一起叫组合)
好处:通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起。
可以降低代码冗余,降低耦合度,也就是在程序中一个对象将另一个对象作为自己的属性。
class Person: def __init__(self,name,sex,age): self.name=name self.sex=sex self.age=age class Student(Person): def __init__(self,name,sex,age,number): super().__init__(name,sex,age,) self.number=number def show_info(self): print(self.__dict__) def select_course(self): print('%s正在逃课。。。'%self.name) class Phone: def __init__(self,phone_number,operator,address): self.operator = operator self.address = address self.phone_number=phone_number def call(self): print('%s正在拨号中'%self.phone_number) stu=Student('小仙女','女','18','001') p1=Phone('88888888888','中国移不动','上海浦东') stu.phone=p1 stu.phone.call()
二:封装
封装:在类的定义的属性前加__开头(没有__结尾)
总结:
1. __开头的属性实现的隐藏仅仅只是一种语法意义上的变形,并不会真的限制类外部的访问
2. 该变形操作只在类定义阶段检测语法时发生一次,类定义阶段之后新增的__开头的属性并不会变形
3. 如果父类不想让子类覆盖自己的属性,可以在属性前加__开头
通俗版本:
封装:在程序中指的是将内容隐藏起来,在面向对象中属性和方法可以被隐藏。
为什么要封装?
提高安全性(cpu频率,缓冲区大小)
对于封装属性而言,是通过给访问和修改增加额外d逻辑判断来实现的
注意:封装不是简单的隐藏。封装是指:隐藏内部实现细节,对外提供访问接口。封装是为了明确区分内部和外部。
如何使用封装?
在属性或者方法之前加上两个下划线__就可以将其设置为私有的。python权限只有两种:公开(谁都可以访问的)和私有的(至于哦自己能访问的)。属性的封装通常需要提供相应的设置器和访问器。
特点:被隐藏的内容在内部是可以访问的,外部无法访问。对于被隐藏的属性,访问和修改都需要通过方法。
class Student: def __init__(self,name,age,idCard): self.name=name self.age=age self.__idCard=idCard def say_hi(self): print('Hello,I am %s,my age is %s'%(self.name,self.age)) def test(self): print(self.__idCard) # def get_card(self): #过渡 # return self.__idCard def get_card2(self,pwd): if pwd=='123': return self.__idCard else: print('抱歉,您没有权限!') stu=Student('张艺兴','18','320830199901223222') # stu.test() idCard=stu.get_card2('111') print(idCard)