python开发“动物园里有什么”游戏

在这里插入图片描述


👨‍💻个人主页@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏机器学习

🅰

请添加图片描述



前言

   “动物园里有什么”游戏想要实现的功能是轮流说出一种动物的种类及叫声,如果该动物在预先规定的范围中,则输出动物的种类及叫声,否则终止游戏。本任务将带领大家利用类和对象,开发“动物园里有什么”游戏。


🎶 一、面向对象的程序设计


  传统的程序设计方法被称为面向过程的程序设计。面向过程程序设计的核心是过程,即解决问题的步骤。面向过程的设计就好比设计一条流水线,需要考虑周全解决问题的每个步骤,如果中间有某个环节发生了变化,那么就得重新设计流水线。因此,使用这种方法开发的程序重用性差、难于维护。在这种情况下,面向对象程序设计诞生了。
面向对象程序设计(object oriented programming,OOP)是将所有预处理的问题抽象为对象,并将相应的属性和行为封装起来,以提高软件的重用性、灵活性和扩展性。
现实世界中,对象就是客观存在的某一事物,如一个人、一辆自行车等。而面向对象的编程世界中,对象具有属性和行为两个特征,每个对象都有各自的属性和行为。而类是对这些具有共同特征的对象的概括、归纳和抽象表达。例如,将人抽象为“人”类,它具有名字、性别等属性,行走、吃饭等行为,那么具体的名字为“小明”“小红”的个体就是“人”类的对象,具体关系如图所示。
在这里插入图片描述


🎶二、类的定义


Python中定义类的语法格式如下。

class 类名:
类体

其中,class是Python的关键字,用于声明类;类名必须是合法标识符,通常是一个有意义的名称;类体定义类的内部实现,一般包括变量和方法的定义。定义类时应注意以下几点。
(1)类名的首字母一般需要大写,如Car。
(2)类名后必须紧跟冒号。
(3)类体相对于class关键字必须保持一定的空格缩进。

例如,定义一个Person类,包含姓名属性和说话行为,可以用下面代码实现。

class Person:						#定义Person类
    name = '小蓝'						#定义姓名变量
    def speak(self):						#定义说方法
        print('大家好!')

在上述代码中,使用class定义了一个名为Person的类,类中有一个name变量和一个speak()方法。从代码中可以看出,方法的定义格式和函数是一样的,主要区别在于,方法必须显式地声明一个self参数,且须位于参数列表的开头。


🎶三、创建对象


Python中创建对象的语法格式如下。

对象名 = 类名()

创建对象后,可以使用它来访问类中的变量和方法,其语法格式如下

对象名.变量名
对象名.方法名([参数])

【例 1】 创建对象,访问类中的变量和方法。
【参考代码】

class Person:						#定义Person类
    name = '小蓝'						#定义姓名变量
    def speak(self):						#定义说方法
        print('大家好!')
person = Person()					#创建对象
person.speak()						#调用类中的方法
print('我是{}'.format(person.name))		                             #访问类中的变量

【运行结果】程序运行结果如图所示。
在这里插入图片描述


🎶四、self参数


  在Python中,一个类可以生成无数个对象,当一个对象的方法被调用时,对象会将自身的引用作为第一个参数(即方法的self参数),传递给该方法。这样,Python就知道需要操作哪个对象的方法了。
  带self参数的方法也称作实例方法,在类的实例方法中访问实例变量时,须以self为前缀,但在外部通过对象名调用实例方法时不需要传递该参数。

【例 2】 self参数的使用。
【参考代码】

class Person:					#定义Person类
    def named(self, name):				#定义命名的方法
        self.name = name				#赋值
    def speak(self):					#定义显示名字的方法
        print('我的名字是{}'.format(self.name))		#输出名字
xiaolan = Person()				#创建对象xiaolan
xiaolan.named('小蓝')				#xiaolan调用named()方法
xiaowu = Person()				#创建对象xiaowu
xiaowu.named('小舞')				#xiaowu调用named()方法
xiaolan.speak()					#xiaolan调用speak()方法
xiaowu.speak()					#xiaowu调用speak()方法

【运行结果】程序运行结果如图所示。

在这里插入图片描述


🎶五、构造方法


  构造方法的固定名称为__init__(),当创建类的对象时,系统会自动调用构造方法,实现对象的初始化操作。
【例 3】 构造方法示例。
【参考代码】

class Person:					#定义Person类
    #构造方法,定义变量并赋初值
    def __init__(self):
        self.name = '小蓝'
        self.snack = '薯条'
    def eat(self):					#定义方法,输出变量
        print('{}喜欢的零食是{}'.format(self.name, self.snack))
xiaolan = Person()					#创建对象
xiaolan.eat()					#调用eat()方法

【运行结果】程序运行结果如图所示。
在这里插入图片描述
  在该程序中,第3~5行实现了__init__()方法,给Person类添加了name和snack属性并赋初值,在eat()方法中访问了name和snack的值。
  例3中,无论创建多少个Person类的对象,name和snack变量的初始值都是默认值。如果想要为不同对象初始化不同的值,可使用有参构造方法,即在构造方法中设置形参。创建对象时,为不同对象传入不同的实参,并将每个对象的变量初始化为实参的值。

【例 4】 有参构造方法示例。
【参考代码】

class Person:					#定义Person类
    #构造方法,定义变量并赋初值
    def __init__(self, name, snack):
        self.name = name
        self.snack = snack
    def eat(self):					#定义方法,输出变量
        print('{}喜欢的零食是{}'.format(self.name, self.snack))
xiaolan = Person('小蓝', '薯条')		              #创建对象xiaolan
xiaolan.eat()				              #xiaolan调用eat()方法
xiaowu = Person('小舞', '冰激凌')		              #创建对象xiaowu
xiaowu.eat()				              #xiaowu调用eat()方法

【运行结果】程序运行结果如图所示。
在这里插入图片描述
  在该程序中,第3~5行定义了带参数的构造方法,包含两个参数name和snack,创建对象时,可为不同对象传入不同的参数值。

【温馨提示】 Python中每个类有且仅有一个构造方法,即便不手动为类添加任何构造方法,创建对象时,也会隐式地调用只包含self参数的构造方法。


🎶六、析构方法


  创建对象时,Python解释器会默认调用构造方法;当需要删除一个对象来释放其所占的资源时,Python解释器会调用析构方法。析构方法的固定名称为__del__(),程序结束时会自动调用该方法,也可以使用del语句手动调用该方法删除对象。
【例 5】 比较下面两个程序,分析输出结果。
【代码一】

class Person():
    def __init__(self):				#构造方法
        print('---调用构造方法创建对象---')
    def __del__(self):				#析构方法
        print('---调用析构方法删除对象---')
person = Person()				#创建对象
print('---程序结束---')

【代码二】

class Person():
    def __init__(self):				#构造方法
        print('---调用构造方法创建对象---')
    def __del__(self):				#析构方法
        print('---调用析构方法删除对象---')
person = Person()				#创建对象
del person				#删除对象
print('---程序结束---')

【运行结果】程序运行结果如图所示。
**加粗样式**
在这里插入图片描述
  以上两段代码的区别在于:代码二在程序结束前使用del语句手动调用析构方法删除对象,因此,先输出“—调用析构方法删除对象—”;而代码一没有使用del语句,因此,在程序结束时才调用析构方法,后输出“—调用析构方法删除对象—”。

结束语🥇

以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼亿点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值