美文网首页
少儿编程很好学之从0开始学python-8.3面向对象实战

少儿编程很好学之从0开始学python-8.3面向对象实战

作者: 阿达老师 | 来源:发表于2018-09-05 07:47 被阅读0次

面向对象是目前主流的编程方法。通过面向对象,可以将系统有效的隔离,使得程序容易维护和扩展。在这节课里,我们会先开发一个简易的待办清单来退回面向对象的好处。

代办清单

我们在学习生活中经常要安排处理很多事情。这些事情如果没有被整理后,很容易忘掉。终端版的待办事项就是为了解决这个问题实现。

我们首先定义个Task类:

class Todo:

   def __init__(self):

       self.taskList = []

       self.__fileLocation__ = "./todo.txt"

       self.__loadTask__()

   def addTodo(self, thing):

       self.taskList.append(thing)

       self.__saveTodo__()

       return True

   def removeTodo(self, thing):

       if not thing in self.taskList:

           return False

       else:

           self.taskList.remove(thing)

           self.__saveTodo__()

           return True

   def searchTodo(self, thing):

       for todo in self.taskList:

           if thing in todo:

               return todo

       return None

   def getAllToto(self):

       return self.taskList

   def __loadTask__(self):

       file = open(self.__fileLocation__, 'r')

       self.taskList = file.readlines()

   def __saveTodo__(self):

       file = open(self.__fileLocation__, 'w')

       file.write('\n'.join(self.taskList))

       file.close()

这个类定义了一个taskList实例属性,拥有:getAllToto searchTodo removeTodo addTodo 几个方法。同时,为了所有的备忘事项通过 __saveTodo__ 方法存储到磁盘里。

接着,我们来使用这个类:

todo = Todo()

while True:

   command = input('command arg')

   if 'exit' == command:

       exit(0)

   commandArr = command.split(' ')

   if 'addTodo' == commandArr[0]:

       todo.addTodo(commandArr[1])

   elif 'removeTodo' == commandArr[0]:

       todo.removeTodo(commandArr[1])

   elif 'getAllToto' == commandArr[0]:

       print(todo.getAllToto())

   else:

       print('not find command')

我们首先实例化了一个 Todo类。接着用while 循环不断监听用户的输入。程序根据用户的输入调用todo对象的不同方法。

在这个项目里,我们复习了第六章学习的文件系统,将待办清单存储到磁盘,这样数据就不会丢失了。在大型系统里,我们会把数据保存到更专业的数据库中。

在 Todo 类中,__saveTodo__ 和 __loadTask__ 两个方法我们定义成了私有方法,通过这种方式。我们把数据的底层存储和上层使用隔离开,这样使用Todo类的人就不会关注这些内部细节了。

面向对象在游戏里的应用

面向对象在游戏里的使用就更普遍了,我们来用python模拟一下王者荣耀的亚瑟和安其拉。

class Hero:

   def __init__(self, nickname, life_value, aggre_value):

       self.nickname = nickname

       self.life_value = life_value

       self.aggre_value = aggre_value

   def attack(self, enemy):

       self.skill()

       enemy.life_value = enemy.life_value - self.aggre_value

   def skill(self):

       print('skill')

class Arthur(Hero):

   def skill(self):

       print('圣剑裁决')

class Angela(Hero):

   def skill(self):

       print('炽热关辉')

我们定义了一个hero类,这个类包含 life_value aggre_value 两个属性,分别表示生命值和攻击值。attack方法根据自己的aggre_value属性的值扣减敌人血量。

Arthur类和Angela类用来表达亚瑟和安其拉。这两个类复写了 skill方法。让亚瑟和安其拉拥有不同的技能。

英雄的攻击技能会首先调用skill方法展示自己的技能,然后执行公共的扣血动作。

通过面向对象,将系统的公共部分和具体实现部分做到了很好的隔离,小朋友们是不是也有这种感觉啦?

经过了这么久的终端编程,是不是很乏了?下节课,我们就进入图形编程了。我们写的代码也终于可以有一张漂亮的了,加油!

阿达老师-孩子身边的编程专家

完整课程请关注阿达老师,主页里有完整的课程目录和观看地址

相关文章

  • 少儿编程很好学之从0开始学python-8.3面向对象实战

    面向对象是目前主流的编程方法。通过面向对象,可以将系统有效的隔离,使得程序容易维护和扩展。在这节课里,我们会先开发...

  • iOS-面向协议编程(POP)

    1. 前言 1.1 传统面向对象编程(OOP)的弊端 从我们刚开始学编程开始,面向对象就被津津乐道,所谓万物皆对象...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • day-14-类和对象

    """""""""1.面向对象编程2.函数式编程3.面向对象编程"""n=100sum1=0for x in ra...

  • Spring5参考指南:SpringAOP简介

    写过程序的都知道OOP即面向对象编程。 从最开始的面向过程编程,到后面的面向对象编程,程序的编写方式发生了重大的变...

  • Python OOP-1

    0. OOP-Python面向对象 Python面向对象 面向对象编程基础公有私有继承组合,Mixin 魔法函数魔...

  • 切面编程之OC篇(面向协议的编程)

    从我们刚开始学编程开始,面向对象就被津津乐道,所谓万物皆对象,我们从颤颤巍巍开始认识到这个东西,继承,封装,多态。...

  • 面向对象编程--实战

    昨天问题 map 这是函数作为参数: 之前学过的方法的调用,就是 ' .'点出来的像之前的 list.count(...

  • 2019-07-17

    在这个有没有对象都要高呼“面向对象”的年代,掌握面向对象会给我们带来意想不到的方便。学编程的小伙伴从开始能写几行代...

  • 适配器模式(php实现)

    在这个有没有对象都要高呼“面向对象”的年代,掌握面向对象会给我们带来意想不到的方便。学编程的小伙伴从开始能写几行代...

网友评论

      本文标题:少儿编程很好学之从0开始学python-8.3面向对象实战

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