面向对象编程(OOP)是Python编程中的一个核心概念,它能帮助程序员更好地组织和管理代码。本篇文章详细讲解了面向对象编程的基本原理和应用。
本篇文章参考:黑马程序员
【情景引入——生活中数据的组织】
学校开学要求学生填写自己的基础信息,老师给每位同学发了一张白纸,让学生自行填写。不同的学生自行填写的内容可能不尽相同,如下图所示:
显而易见,同学们填写的内容混乱。但是如果我们将白纸改为改为登记表,并打印出来让学生自行填写,他们就会按照我们设计的表格规范地填写内容,这样大家所填的信息就会整洁明了。
那程序又是如何组织数据的呢?
程序中有多种数据类型,可以采用不同的方式来组织数据,比如使用字典、字符串或列表来维护学生的信息。
然而,使用变量来记录学生信息可能会导致数据组织混乱和不统一。如果程序能够像生活中一样设计表格并打印出来供人填写,那么数据的组织将变得更加方便和清晰。面向对象的设计允许我们通过类和对象的方式来组织和管理数据,使得我们的程序结构更加清晰、易于理解和维护。
使用对象组织程序:
①在程序中设计表格,我们称之为设计类(class)。
类是对现实世界中某种事物的抽象,它定义了事物的属性(数据)和行为(方法)。设计的登记表可以视为一个类,它定义了学生信息应包含的字段,如姓名、年龄、学号等。
②在程序中打印表格,我们称之为创建对象。
打印一张表格类比于一个类的实例化,即创建一个对象。
③在程序中填写表格,我们称之为对象属性赋值。
通过表格对象,学生可以填写自己的信息,每个学生填写的信息就是对该对象的特定实例。
所以在生活和程序中,我们可以通过设计、打印和填写表格的形式来组织数据。这一过程相当于使用类来封装属性,并基于类创建一个个对象来使用。
类的使用语法: class 类名称 : 类的属性 类的行为
注意:函数是写在类外的,定义在类内部的函数都称之为方法
创建类对象的语法: 对象 = 类名称()
# 1.设计一个类(类比生活中设计一张登记表)
class Student:
name=None # 记录学生姓名
gender=None # 记录学生性别
nationality=None # 记录学生国籍
native_place=None # 记录学生籍贯
age=None # 记录学生年龄
# 2.创建一个对象类比生活中打印一张登记表)
stu_1=Student()
# 3.对象属性进行赋值(类比生活中填写登记表)
stu_1.name="小明"
stu_1.gender="男"
stu_1.nationality="中国"
stu_1.native_place="广东省"
stu_1.age="15"
# 4.获取对象中记录的信息
print(stu_1.name)
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)
输出结果: 小明
男
中国
广东省
15
类中不仅可以定义属性用来记录数据,也可以定义函数用来记录行为。
定义语法: def 方法名(self,形参1,……,形参N): 方法体
在类中定义成员方法和定义函数基本一致,但仍有细微区别,区别在于方法定义的参数列表中有一个self
关键字。
self
关键字self
,成员方法才能访问类的成员变量self
会自动被python传入self
出现在形参列表中,但是不占用参数位置,无需理会# 定义一个带有成员方法的类
class Student:
# 成员变量
name=None # 学生的姓名
# self必须出现在传参列表中,但当我们调用的时候可以当它不存在
# 成员方法
def say_hi(self):
print(f"大家好,我是{self.name},以后请多关照!")
def say_hi2(self,msg):
print(f"大家好,我是{self.name},{msg}")
# 创建类对象
stu1=Student()
stu1.name="小明"
stu1.say_hi()
stu2=Student()
stu2.name="小红"
stu2.say_hi2("很高兴认识大家!")
输出结果: 大家好,我是小明,以后请多关照! 大家好,我是小红,很高兴认识大家!
现实世界的事物由属性和行为组成。
现实世界的事物有属性和行为,类也有属性和行为。使用程序中的类,可以完美的描述现实世界的事物。
基于类创建对象的语法: 对象 = 类名称()
面向对象编程的核心理念是使用对象进行编程。我们首先设计类,然后基于这些类创建对象,并利用这些对象来完成具体的任务。
思考:为什么必须创建对象才能使用类呢?
答:类可以看作是一种程序内部的“设计图纸”,只有基于这张图纸生成实际的实体(对象),才能使其正常工作。
在现实中生产事物:
在现实中生产一个闹钟需要我们先设计一张图纸,图纸中规划了闹钟的属性(比如厚度、尺寸、材质)以及行为(比如响铃),有了设计图纸后才会在生产线中生产出一个个实体。
在程序中通过类来描述:
基于类创建对象:
# 设计一个闹钟类
class Clock:
id = None # 闹钟编号
price = None # 价格
def ring(self):
# 导入 winsound 模块,实现音频的输出
import winsound
# 参数一frequency:音频频率 (单位Hz)
# 参数二duration:音频持续时间 (单位毫秒)
winsound.Beep(2000, 3000)
# 构建2个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "003032"
clock1.price = 19.99
print(f"闹钟ID:{clock1.id},价格:{clock1.price}")
clock1.ring()
clock2 = Clock()
clock2.id = "003033"
clock2.price = 21.99
print(f"闹钟ID:{clock2.id},价格:{clock2.price}")
clock2.ring()
闹钟响铃并输出: 闹钟ID:003032,价格:19.99
闹钟ID:003033,价格:21.99
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。