类的三大特性-封装
day23
一、面向对象之组合:
1、组合的定义:
组合是指在一个程序中,一个类中的对象将另一个类中的对象做为自己的属性。
2、组合的特点:
a、减少代码冗余
3、组合与继承的对比:
组合与继承都是对已有类的资源进行有效利用的重要方式,根据组合和继承的各自不同的特点,选取不同的方式来编写程序:
a、继承:继承通过建立类与类之间的包含关系(实质是派生类与基类),通常描述成什么是什么,比如学生是人类,马是动物类等。
b、组合:组合是建立类与类之间的所属关系(实质是两个毫无关系的类,通过实例化出的对象强行建立所属关系),通常表述成什么的什么,或者什么有什么,比如学生有手机等。
class People: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class Course: def __init__(self,name,period,price): self.name=name self.period=period self.price=price def tell_info(self): print('<%s %s %s>' %(self.name,self.period,self.price)) class Teacher(People): def __init__(self,name,age,sex,job_title): People.__init__(self,name,age,sex) self.job_title=job_title self.course=[] self.students=[] class Student(People): def __init__(self,name,age,sex): People.__init__(self,name,age,sex) self.course=[] egon=Teacher('egon',18,'male','沙河霸道金牌讲师') #创建出老师对象 s1=Student('牛榴弹',18,'female') #创建学生对象 # 以上是继承的方式的提现 python=Course('python','3mons',3000.0) #创建出课程对象 linux=Course('python','3mons',3000.0) #以上的学生对象(老师对象)与实例化出的课程对象之间没有任何关系 #为老师egon和学生s1添加课程(绑定关系的步骤) egon.course.append(python) egon.course.append(linux) s1.course.append(python) #为老师egon添加学生s1 egon.students.append(s1) #使用 for obj in egon.course: obj.tell_info()
组合的练习:
""" 用代码 描述乐队 一个乐队有其他多个乐器组成 主唱 乐队可以演奏歌曲 主唱是歌手类 会唱歌 ,有名字 钢琴类 能弹奏,有价格,牌子 """ class Band: def __init__(self,name,singer,piano): self.name = name self.singer = singer self.piano = piano def play_music(self): print("hello 我们%s 组合! 请欣赏" % self.name) self.singer.singing() self.piano.playing() class Singer: def __init__(self,name): self.name = name def singing(self): print("你好我是歌手 ",self.name) class Piano: def __init__(self,price,brand): self.price = price self.brand = brand def playing(self): print("正在弹琴.....") # 发现一个歌手 singer = Singer("俊元") # 买一台钢琴 p = Piano("100","亚麻黑") # 组件乐队 b = Band("Boys",singer,p) # 开演唱会 b.play_music()
二、面向对象之封装
1、什么是封装
在程序中,封装就是将其内容隐藏起来,面向对象中就是将属性和功能隐藏起来。
注意:程序中的封装不是单纯的隐藏,而是指隐藏内部实现的细节,对外部提供使用接口。
2、为什么要封装
a、提高安全性
对于封装属性而言,是通过给访问和修改增加额外的逻辑判断来实现的。
b、封装的目的是为了明确的区分内外部
3、如何使用封装
在属性或者方法的名称前,加上两个下划线,就可以将其设置为私有的属性或方法。
注:Python中的权限只有两种,公开(谁都能访问)的和私有(自由自己能访问)的
属性的封装,通过需要,提供相应的设置器和访问器。
-----未完待续----