👨💻个人主页:@开发者-曼亿点
👨💻 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语句,因此,在程序结束时才调用析构方法,后输出“—调用析构方法删除对象—”。
结束语🥇
以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖