zoukankan      html  css  js  c++  java
  • 类的三大特性-封装

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

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

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

  • 相关阅读:
    jpa入门案例----使用jpa对数据库进行查询、删除、修改操作
    ssm详细流程和步骤
    Dubbo
    ssm运行BUG
    mybatis 入门
    Linux
    Redis
    maven
    三层架构 开发模式
    转发和重定向的区别
  • 原文地址:https://www.cnblogs.com/peng-zhao/p/10133889.html
Copyright © 2011-2022 走看看