1、理解使用对象完成数据组织的思路
1.1类和对象的基本理解
理解类:从现实世界到编程世界
类由三个部分组成:类名、类的属性、类的方法。类的定义实际上是描述事物的一种方法,在现实世界中,事物都是有属性和行为的。通过类,我们可以将这些属性和行为组织在一起,使其更易于管理和使用。
类的基本组成部分
- 类名:类的名字,用来标识这个类。例如,我们可以用
Phone
来代表手机这个类。 - 类的属性:属性是描述事物特征的变量。例如,一部手机的属性可以包括型号、重量、长宽等。
- 类的方法:方法是描述事物行为的函数。例如,手机的行为可以包括上网、打电话、拍照等。
现实世界的类比
手机:
- 属性:型号、重量、长宽
- 行为:上网、打电话、拍照
为了更好地理解对象和类之间的关系,我们不妨来想象一个场景:
现在,老师要搜集同学们的个人信息。同学们需要将自己的姓名、年龄和城市填在纸上交给老师。那么,你会怎样填写呢?
没错!大多数人会选择列一张表格。
在表格中,我们可以将“姓名”、“年龄”和“城市”看作表格的属性。当不同的同学填写这张表格时,我们就搜集到了不同的数据。
因此我们可以形象地理解为:
- 类:一种程序内的设计图纸,就像我们设计的表格模板,定义了所有同学信息的结构。
- 对象:基于类(设计图纸)创建的具体实体,就像每个同学填写的表格。
在编程中,类定义了对象的属性和行为,而对象则是类的具体实例。
类相当于一种模版,规定了对象应该有哪些属性(如姓名、年龄、城市)以及可以进行哪些操作(如修改属性、打印信息等)。而对象则是具体使用这个模版创建出来的个体,每个对象都有自己的属性值(如小明的姓名、年龄和城市)。
因此,类就像是一张表格的模版,而对象就是填好的每一行表格。类提供了一种统一的结构和行为定义,而对象则是这个结构的具体体现,每个对象都有独特的数据但共享相同的行为。
通过这种方式,类和对象共同使得程序中的数据管理更加有序和高效。
2、编程实现
Python提供了class关键字来定义类,例如:
1.在程序中设计表格,我们称之为:设计类
class student:
name=None
age=None
score=None
我们创建了一个名叫student的类,包含名字,年龄,分数三个属性,并将三个属性的初值赋为None。
2.在程序中打印生产表格:创建对象
stu1=student()
stu2=student()
我们创建了stu1和stu2两个对象,可以理解为两个同学
3.在程序中填写表格,明确对象后对对象的属性赋值:
stu1=student()
stu1.name='张三'
stu1.age=18
stu1.score=80
stu2=student()
stu2.name='李四'
stu2.age=19
stu2.score=90
这样我们就完成了数据的组织,不妨打印以下,看看效果。
3、成员方法与self关键字
我们在1.1中提到类包含类名,成员属性和成员方法。前两者在2中都已介绍,现在我们来学习成员方法的使用。
成员方法可以理解为类的行为。在程序中则是一个函数。
针对上一问的例子,同学们交代了基本信息,就要做个自我介绍了。我们设计一个程序,让同学们报出自己的名字。
def introduction(self):
print(f'我是{self.name}')
成员方法
def
关键字: 这是 Python 用来定义函数或方法的关键字。方法是类中的函数,与类的实例相关联。
方法名称
introduction
: 这是方法的名称,用于标识这个方法。可以通过调用这个名称来执行方法中的代码。
参数
self
: self
是一个引用,指向调用这个方法的实例对象。通过 self
,你可以访问对象的属性和其他方法。在类的方法定义中,self
是必须作为第一个参数的,尽管你在调用方法时并不显式传递它。
这里总结以下self的作用:
1、self表示类对象本身的意思。
2、只有通过self,成员方法才能访问类的成员变量。
3、self出现在形参中,但是不占用参数位置。
方法主体
print(f'我是{self.name}')
:
f
字符串:这是一个格式化字符串,用于在字符串中嵌入表达式。以f
开头的字符串可以在花括号{}
中包含变量或表达式。self.name
:通过self
访问对象的name
属性,并将其嵌入到字符串中。
完整运行代码得到如下结果:
4、构造方法
在上面的例子中,我们需要手动为每个对象的属性赋值,这个过程确实比较繁琐,尤其是当对象较多时,会耗费大量时间和精力。为了解决这个问题,我们可以使用构造方法(即初始化方法)来简化属性赋值的过程。
Python中__init__( )方法称为构造方法。
可以实现:
1、创建类对象时自动执行。
2、创建类对象时,将传入参数自动传递给__init__( )方法中。
我们参考下面这个例子:
class Student:
# 定义类的属性,初始值为 None
name = None
age = None
score = None
# 构造方法,在创建对象时自动调用,用于初始化对象的属性
def __init__(self, name, age, score):
self.name = name # 初始化姓名属性
self.age = age # 初始化年龄属性
self.score = score # 初始化分数属性
# 成员方法,用于打印对象的自我介绍信息
def introduction(self):
print(f'我是{self.name}, 我的年龄是{self.age}, 我的分数是{self.score}')
# 创建 Student 类的对象,并初始化属性
stu1 = Student('小明', 19, 90)
# 调用对象的 introduction 方法,打印自我介绍信息
stu1.introduction()
在上面的代码中,我们定义了一个构造方法 __init__
,它接受三个参数:name
、age
和 score
。当创建对象时,这些参数将用于初始化对象的属性。
在构造方法中,self.name = name
这一行代码将传入的 name
参数值赋给对象的 name
属性。类似地,self.age = age
和 self.score = score
将传入的 age
和 score
参数值赋给对象的相应属性。
当我们创建 Student
类的对象时,例如 stu1 = Student('小明', 19, 90)
,构造方法 __init__
会自动调用。
传入的参数 '小明'
、19
和 90
分别赋值给对象 stu1
的 name
、age
和 score
属性。
最后再强调两点注意事项:
1、构造方法不要忘记使用self关键字。
2、在方法内部使用成员变量需要使用self关键字。