美文网首页
Python基础35-面向对象(综合案例:封装/继承/多态)

Python基础35-面向对象(综合案例:封装/继承/多态)

作者: Jacob_LJ | 来源:发表于2018-06-06 22:29 被阅读29次

Python基础-面向对象

面向对象案例:封装、继承、多态

1 需求

定义三个类, 小狗, 小猫, 人

小狗: 姓名, 年龄(默认1岁);        吃饭, 玩, 睡觉, 看家(格式: 名字是xx, 年龄xx岁的小狗在xx)

小猫: 姓名, 年龄(默认1岁);        吃饭, 玩, 睡觉, 捉老鼠(格式: 名字是xx, 年龄xx岁的小猫在xx)

人:   姓名, 年龄(默认1岁), 宠物;  吃饭, 玩, 睡觉(格式: 名字是xx, 年龄xx岁的人在xx)
                                养宠物(让所有的宠物吃饭, 玩, 睡觉),
                                让宠物工作(让所有的宠物根据自己的职责开始工作)

2 思考点

封装

  • 将一些属性和相关方法封装在一个对象中,即对象的抽取
  • 类定义,class
  • 给类添加,类属性还是实例属性的判断
  • 使用实例属性时,是创建实例后添加,还是通过初始化方法添加
  • 通过初试化方法传参添加实例属性时,注意默认值参数写法及其位置
  • 实例方法的定义
  • 格式化打印的方式,字符串 format 或者格式符替换形式
  • __str__内置方法对 self 的描述使用

继承

  • 多个类之间,共有有属性和方法抽取,抽象出共有父类
  • 通过 super 方式调用父类初始化方法,子类初始化中传参个数和位置问题
  • super调用父类初始化方法的方式super().__init__(), super(Person, self).__init__(),;
  • 父类中的__init__()方法内没有默认值的参数,当子类通过 super 调用时,需写上父类没有默认值的参数

多态

  • 相似方法优化成名称相同,方便统一调用
  • 子类调用父类的方法

可进一步优化点

class Animal:

    def __init__(self, name, age=1):
        self.name =  name
        self.age = age

    def eat(self):
        print("%s,在吃饭" % self)

    def play(self):
        print("%s,在玩" % self)

    def sleep(self):
        print("%s,在睡觉" % self)



class Person(Animal):

    def __init__(self, name, pets, age):
        super().__init__(name, age)
        self.pets = pets

    def yang_pets(self):
        for pet in self.pets:
            pet.eat()
            pet.play()
            pet.sleep()

    def make_pets_word(self):
        for pet in self.pets:
            pet.work()

    def __str__(self):
        return "名字叫{},年龄是{}的人".format(self.name, self.age)

class Dog(Animal):

    def work(self):
        print("小狗在看家")

    def __str__(self):
        return "名字叫{},年龄是{}的小狗".format(self.name, self.age)


class Cat(Animal):
    def work(self):
        print("小猫在抓老鼠")

    def __str__(self):
        return "名字叫{},年龄是{}的小猫".format(self.name, self.age)

d = Dog("小Dog", 3)
c = Cat("小Cat", 4)
p = Person("JJ",[d, c], 20)

p.eat()
p.play()
p.sleep()
p.yang_pets()
p.make_pets_word()

>>>>打印结果
名字叫JJ,年龄是20的人,在吃饭
名字叫JJ,年龄是20的人,在玩
名字叫JJ,年龄是20的人,在睡觉
名字叫小Dog,年龄是3的小狗,在吃饭
名字叫小Dog,年龄是3的小狗,在玩
名字叫小Dog,年龄是3的小狗,在睡觉
名字叫小Cat,年龄是4的小猫,在吃饭
名字叫小Cat,年龄是4的小猫,在玩
名字叫小Cat,年龄是4的小猫,在睡觉
小狗在看家
小猫在抓老鼠

相关文章

  • Python基础35-面向对象(综合案例:封装/继承/多态)

    面向对象案例:封装、继承、多态 1 需求 2 思考点 封装 将一些属性和相关方法封装在一个对象中,即对象的抽取 类...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • 面向对象设计基础&原则

    面向对象设计基础 抽象 封装 继承 多态 面向对象设计原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程

  • python面向对象特性之封装

    面向对象——封装 一、概述 Python面向对象的三大特性:封装、继承和多态。 封装:在类中对数据的赋值、内部调用...

  • Python面向对象封装

    面向对象——封装 一、概述 Python面向对象的三大特性:封装、继承和多态。 封装:在类中对数据的赋值、内部调用...

  • 面向对象

    Java 语法基础 面向对象 ==面向对象有三宝:封装、继承和多态== 继承 关键字:extends 和 impl...

  • 第八章:面向对象高级编程

    数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,允许我们写...

  • Python面向对象实战:学生教师信息管理(1)

    前言 这一节我们把python面向对象的知识综合在一起,包含了继承、封装、多态和抽象方法做一个小案例。 part1...

  • iOS基础 - oc的三大特性

    封装、继承、多态 oc是面向对象的程序设计语言,而面向对象的三大特征:封装、继承、多态。 封装 没有绝对的封装,只...

  • 宅男知识大补丸 学多态 认包包

    java零基础入门-面向对象篇(十) 多态 面向对象的三大特征,封装,继承我们讲完了,这次来讲多态。 多态就是指一...

网友评论

      本文标题:Python基础35-面向对象(综合案例:封装/继承/多态)

      本文链接:https://www.haomeiwen.com/subject/euvisftx.html