AI项目博客
记录 AI 工程实践与大模型应用

Python 学习笔记 15|面向对象 · 概述

1. 概述

1.1. 对象

『对象』是一个拥有『属性』和『行为』的个体,它是构成现实世界和程序世界的基本单位。编程领域有这么一句话,叫“万物皆对象!”之所以这么说,是因为任何一个具体存在的人或物,都可以看成是一个对象,例如:一个人、 一辆车、一部手机,都是对象,他们的『属性』和『行为』分别是:

  • 人的属性有:姓名、性别、年龄…… ,人的行为有:吃饭、睡觉、跑步……
  • 车的属性有:品牌、颜色、价格…… ,车的行为有:启动、加速、刹车……
  • 手机的属性有: 品牌、颜色、电量…… ,手机的行为有: 打电话、播放音乐、拍照……

1.2. 面向对象

『面向对象』是一种以对象为中心,去思考和组织代码的方式,它更关注:“谁来做这件事”。

以“做饭”这件事为例:

  • 传统思想:关注“做饭的步骤”,会依次进行:洗菜 → 切菜 → 炒菜 → 装盘。
  • 面向对象思想:关注“谁来做这件事”,会找『切菜员』来洗菜和切菜,找『厨师』来炒菜和装盘。

在上述描述中:『切菜员』和『厨师』就是对象,至于这些对象是我们自己编写的,还是来自外部模块,这并不重要。

面向对象思想的好处是:可扩展性强,『切菜员』能给我做菜,也能给别人做菜;能做简单的菜,也能做复杂的菜。在程序中也是这个道理:我们定义的“对象”,可以被复用,多个对象之间还可以协作,一起组成更大的系统。

1.3. 类

『类(class)』是用来描述一类事物的”模板”,它规定了一类事物所具有的『属性』和『行为』。

人类

汽车类

1.4. 实例 VS 实例化

1️⃣实例:根据『类』创建出来的一个具体的『对象』又称『实例』,也可称为『实例对象』。

对象、实例、实例对象,这三个词在日常使用中是同一个意思。

2️⃣实例化:所谓『实例化』就是根据类“制造出”一个对象的过程。

类是抽象的“模板”,『实例 / 实例对象 / 对象』是具体的个体。

类进行实例化,得到实例对象

类进行实例化,得到实例对象

2. 基本使用

2.1. 类的定义

1️⃣语法格式:

# 定义一个类(类名通常用大驼峰写法)
class 类名:
    # 当一个函数被定义在类中时,它就被称为“方法”。
    # __init__方法又叫:初始化方法,它主要用来给当前实例对象添加属性。
    # __init__方法收到的参数是:当前正在创建的实例对象、其他自定义参数。
    # 当我们后期编写代码,对类进行实例化的时候,Python就会自动调用__init__方法,去完成对实例的初始化。
    def __init__(self, 参数1, 参数2, 参数3):
        # 通过self给当前实例添加属性,语法格式为:self.属性名 = 属性值
        self.属性名 = 参数1
        self.属性名 = 参数2
        self.属性名 = 参数3

2️⃣相关说明:

  • 类名通常采用大驼峰命名法(如:Person、UserInfo)。
  • 类中所定义的函数,通常又称为方法。
  • __init__方法叫初始化方法,当我们对类进行实例化时,Python会自动调用__init__方法。
  • __init__方法的名字不能更改,否则 Python 无法自动调用。
  • __init__收到的第一个参数是当前正在创建的实例对象,形参通常用self。
  • __init__方法收到的除self以外的参数,通常用来设置实例的属性值,通过“点”语法实现:self.属性名 = 属性值

3️⃣代码示例:

# 定义一个Person类(类名通常使用:大驼峰写法)
class Person:
    # 说明:当一个函数被定义在了类中时,那这个函数就被称为:方法。
    # __init__方法:初始化方法,主要作用:给当前正在创建的实例对象添加属性
    # __init__方法收到的参数:当前正在创建的实例对象(self)、其它的自定义参数
    # 当我们以后编写代码去创建Person类实例的时候,Python会自动调用__init__方法
    def __init__(self, name, age, gender):
        # 给实例添加属性(语法为:self.属性名 = 值)
        self.name = name
        self.age = age
        self.gender = gender

2.2. 创建实例

1️⃣语法格式:

实例名 = 类名(参数1, 参数2, ...)

2️⃣代码示例:

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

# 创建Person的实例对象
p1 = Person('张三', 18, '男')
p2 = Person('李四', 22, '女')

3️⃣通过实例的“点”语法,可以『访问』或『修改』实例的属性。

# 如果直接打印一个实例的话,我们是看不到实例身上的属性的
print(p1)
print(p2)

# 通过点语法可以访问或修改实例身上的属性
print(p1.name)
print(p1.age)
print(p1.gender)
print('-' * 20)
print(p2.name)
print(p2.age)
print(p2.gender)
p1.name = '阿三'
print(p1.name)

4️⃣通过实例.__dict__ 的方式,可以查看实例身上的所有属性。

# 通过 实例.__dict__ 可以查看实例身上的所有属性
print(p1.__dict__)
print(p2.__dict__)

5️⃣在实例创建完毕后,也可以通过实例.属性名 = 值的形式,给实例追加属性。

# 实例创建完毕后,依然可以通过 实例.属性名 = 值 去给实例追加属性
p1.address = '北京昌平宏福科技园'
print(p1.__dict__)

6️⃣通过type() 函数,可以查看某个实例对象,是由哪个类创建出来的。

# 通过type函数,可以查看某个实例对象,是由哪个类创建出来的
print(type(p1))
print(type(p2))

2.3. 自定义方法(行为)

我们之前提到过:类是用来规定一类事物所具有的『属性』和『行为』,在上一小节中,我们已经通过 self.属性名 = 值的形式,为实例对象添加了『属性』;接下来,要想让对象具备相应的『行为』,就需要通过『自定义方法』来实现。

『自定义方法』的第一个参数也是self,是调用该方法的实例对象。

# 定义一个Person类
class Person:
    # 初始化方法(给实例添加属性)
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    # 自定义方法(给实例添加行为)
    # speak方法收到的参数是:调用speak方法的实例对象(self)、其它参数
    # speak方法只有一份,保存在Person类身上的,所有Person类的实例对象,都可以调用到speak方法
    def speak(self, msg):
        print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')

# 验证一下:speak方法是存在Person类身上的
# print(Person.__dict__)

# 创建Person类的实例对象
p1 = Person('张三', 18, '男')
p2 = Person('李四', 22, '女')

# 验证一下:Person的实例对象身上是没有speak方法的
# print(p1.__dict__)
# print(p2.__dict__)

# 所有Person类的实例对象,都可以调用到speak方法
# 当执行p1.speak()的时候,查找speak方法的过程:1.实例对象自身(p1)  =>  2.实例的“缔造者”的身上(Person)
# p1.speak('好好学习')
# p2.speak('天天向上')

# 验证一下上述的查找过程
def speak():
    print('巴拉巴拉巴拉巴拉巴拉')
p1.speak = speak
print(Person.__dict__)
print(p1.__dict__)
print(p2.__dict__)
p1.speak()
赞(0)
未经允许不得转载:AI项目博客 » Python 学习笔记 15|面向对象 · 概述

评论 抢沙发

AI项目博客

专注 AI 工程化落地 —— 覆盖智能体、大模型、Java AI 与 Python 的学习笔记,以及 AI 平台的项目实战记录。

关于本站文章归档

登录

找回密码

注册