类的三大特性-封装

day23

一、面向对象之组合:

1、组合的定义:

组合是指在一个程序中,一个类中的对象将另一个类中的对象做为自己的属性。

2、组合的特点:

a、减少代码冗余

b、降低代码间的耦合度

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中的权限只有两种,公开(谁都能访问)的和私有(自由自己能访问)的

属性的封装,通过需要,提供相应的设置器和访问器。

-----未完待续----

posted @ 2018-12-17 21:01  zhao_peng  阅读(311)  评论(0编辑  收藏  举报