👋 大家好!这是我学习Python的第六天笔记,也是这个系列的最后一篇。今天学习Python中最重要的概念之一——类与面向对象编程。掌握类,你就能用代码更好地描述现实世界的事物!

文中会有代码+输出对比,还有小贴士和常见陷阱提醒哦!

📑 目录
🐍 Python学习第七天:类与面向对象编程(完结篇)

📑 目录

🏗️ 1. 类的基础概念

🚗 2. 创建和使用类

2.1 类的定义

2.2 构造方法 init()

2.3 创建实例

2.4 访问属性

2.5 调用方法

🔄 3. 修改属性的值

3.1 直接修改

3.2 通过方法修改

3.3 通过方法递增

👨‍👦 4. 继承

4.1 子类的定义

4.2 super()函数

4.3 添加子类特有的属性和方法

4.4 重写父类方法

📦 5. 导入类

5.1 导入单个类

5.2 导入多个类

5.3 导入所有类(不推荐)

5.4 给类起别名

📚 今日学习总结

🎉 系列完结感言

🏗️ 1. 类的基础概念
面向对象编程是Python最重要的编程范式之一。类就像是对象的蓝图,定义了对象的属性和行为。

类(Class):抽象的概念,比如"汽车"

对象(Object):具体的实例,比如"我的奥迪A4"

属性(Attribute):对象的特点,比如颜色、里程

方法(Method):对象能做的事情,比如行驶、加油

🚗 2. 创建和使用类
2.1 类的定义
使用class关键字定义类:

python
class Car:
“”“一次模拟汽车的简单尝试”“”

def __init__(self, make, model, year):
    """初始化描述汽车的属性"""
    self.make = make
    self.model = model
    self.year = year
    self.odometer = 0  # 默认属性,不需要通过参数传递

def get_descriptive_name(self):
    """返回格式规范的描述性信息"""
    long_name = f"{self.year} {self.make} {self.model}"
    return long_name.title()

def read_odometer(self):
    """打印一条指出汽车行驶里程的信息"""
    print(f"This car has {self.odometer} miles on it.")

def update_odometer(self, mileage):
    """更新汽车行驶里程的信息"""
    if mileage >= self.odometer:
        self.odometer = mileage
    else:
        print("You can't roll back an odometer!")

def increment_odometer(self, miles):
    """让里程表读数增加指定的量"""
    self.odometer += miles

def fill_gas_tank(self):
    """加油"""
    print("This car has a gas tank!")

2.2 构造方法 init()
特别注意:__init__是构造方法名,前后各有两个下划线!

python
def init(self, make, model, year):
“”“初始化描述汽车的属性”“”
self.make = make
self.model = model
self.year = year
self.odometer = 0
self:指向实例本身的引用,每个方法第一个参数必须是self

init:创建新实例时自动调用

属性可以在__init__中设置默认值(如odometer = 0)

2.3 创建实例
python

创建我的车

my_car = Car(‘audi’, ‘a4’, 2024)
2.4 访问属性
python

直接访问属性

print(f"品牌:{my_car.make}“)
print(f"型号:{my_car.model}”)
print(f"年份:{my_car.year}“)
print(f"里程:{my_car.odometer}”)
输出:

text
品牌:audi
型号:a4
年份:2024
里程:0
2.5 调用方法
python

调用方法

print(my_car.get_descriptive_name())
my_car.read_odometer()
输出:

text
2024 Audi A4
This car has 0 miles on it.
🔄 3. 修改属性的值
有三种方式可以修改属性的值:

3.1 直接修改
直接通过实例访问属性并赋值:

python
my_car = Car(‘audi’, ‘a4’, 2024)
print(f"修改前:“, end=”")
my_car.read_odometer()

直接修改属性值

my_car.odometer = 23
print(f"修改后:“, end=”")
my_car.read_odometer()
输出:

text
修改前:This car has 0 miles on it.
修改后:This car has 23 miles on it.
3.2 通过方法修改
通过定义的方法来修改属性,可以在方法中添加逻辑控制:

python
my_car = Car(‘audi’, ‘a4’, 2024)
print(f"初始:“, end=”")
my_car.read_odometer()

通过方法修改属性的值

my_car.update_odometer(45)
print(f"更新到45:“, end=”")
my_car.read_odometer()

尝试回调里程表(不允许)

my_car.update_odometer(30)
输出:

text
初始:This car has 0 miles on it.
更新到45:This car has 45 miles on it.
You can’t roll back an odometer!
3.3 通过方法递增
通过方法让属性值增加指定的量:

python
my_car = Car(‘audi’, ‘a4’, 2024)
my_car.update_odometer(45)
print(f"当前里程:“, end=”")
my_car.read_odometer()

通过方法让属性递增

my_car.increment_odometer(100)
print(f"增加100后:“, end=”")
my_car.read_odometer()
输出:

text
当前里程:This car has 45 miles on it.
增加100后:This car has 145 miles on it.
完整示例:

python
my_car = Car(‘audi’, ‘a4’, 2024)
print(my_car.get_descriptive_name())
my_car.read_odometer()

直接修改属性值

my_car.odometer = 23
my_car.read_odometer()

通过方法修改属性的值

my_car.update_odometer(45)
my_car.read_odometer()

通过方法让属性递增

my_car.increment_odometer(100)
my_car.read_odometer()
输出:

text
2024 Audi A4
This car has 0 miles on it.
This car has 23 miles on it.
This car has 45 miles on it.
This car has 145 miles on it.
👨‍👦 4. 继承
继承允许我们创建一个类(子类),继承另一个类(父类)的所有属性和方法,然后添加自己的特有属性和方法。

4.1 子类的定义
python
class ElectricCar(Car):
“”“电动车的独特之处”“”

def __init__(self, make, model, year):
    """初始化父类的属性"""
    super().__init__(make, model, year)
    self.battery_size = 40  # 电动车特有的属性

def describe_battery(self):
    """打印一条描述电池容量的消息"""
    print(f"This car has a {self.battery_size}-kWh battery.")

def fill_gas_tank(self):
    """重写父类方法:电车没有油箱"""
    print("This car doesn't have a gas tank!")

4.2 super()函数
super()是一个特殊函数,让你能够调用父类的方法:

python
def init(self, make, model, year):
“”“初始化父类的属性”“”
super().init(make, model, year) # 调用父类的__init__
self.battery_size = 40
4.3 添加子类特有的属性和方法
子类可以添加父类没有的属性和方法:

python

创建电动车实例

my_leaf = ElectricCar(‘nissan’, ‘leaf’, 2024)

调用继承自父类的方法

print(my_leaf.get_descriptive_name())

调用子类特有的方法

my_leaf.describe_battery()
输出:

text
2024 Nissan Leaf
This car has a 40-kWh battery.
4.4 重写父类方法
如果父类的方法不符合子类的需求,可以在子类中重写它:

python
class ElectricCar(Car):
# … 其他代码 …

def fill_gas_tank(self):
    """重写父类方法:电车没有油箱"""
    print("This car doesn't have a gas tank!")

测试

my_leaf = ElectricCar(‘nissan’, ‘leaf’, 2024)
my_leaf.fill_gas_tank() # 调用的是子类的方法,不是父类的
输出:

text
This car doesn’t have a gas tank!
完整继承示例:

python

创建电动车实例

my_leaf = ElectricCar(‘nissan’, ‘leaf’, 2024)

调用继承的方法

print(my_leaf.get_descriptive_name())

调用子类特有的方法

my_leaf.describe_battery()

调用重写的方法

my_leaf.fill_gas_tank()
输出:

text
2024 Nissan Leaf
This car has a 40-kWh battery.
This car doesn’t have a gas tank!
📦 5. 导入类
随着程序越来越大,最好把类分门别类放到不同的文件中,便于维护。

假设我们有一个car.py文件,包含Car和ElectricCar类。

5.1 导入单个类
python
from car import Car

使用导入的类

my_car = Car(‘audi’, ‘a4’, 2024)
print(my_car.get_descriptive_name())
5.2 导入多个类
python
from car import Car, ElectricCar

使用导入的类

my_car = Car(‘audi’, ‘a4’, 2024)
my_leaf = ElectricCar(‘nissan’, ‘leaf’, 2024)

print(my_car.get_descriptive_name())
print(my_leaf.get_descriptive_name())
5.3 导入所有类(不推荐)
python
from car import * # 从car文件里导入所有类

不推荐:可能引起命名冲突,且不清楚导入了哪些类

⚠️ 注意:不推荐使用import *,因为:

可能覆盖现有名称

代码可读性差,不清楚使用了哪些类

如果模块很大,会导入很多不需要的内容

5.4 给类起别名
如果类名太长,或者有命名冲突,可以给类起别名:

python
from car import ElectricCar as EC

使用别名

my_leaf = EC(‘nissan’, ‘leaf’, 2024)
print(my_leaf.get_descriptive_name())
语法:

python
from 文件名 import 类名 as 别名
📚 今日学习总结
知识点 方法/语法 说明 示例
定义类 class 类名: 创建类 class Car:
构造方法 def init(self): 初始化新实例 def init(self, make):
创建实例 对象 = 类名() 实例化 my_car = Car(‘audi’)
访问属性 对象.属性 获取属性值 my_car.make
调用方法 对象.方法() 执行方法 my_car.read_odometer()
直接修改属性 对象.属性 = 新值 直接赋值 my_car.odometer = 23
通过方法修改 对象.方法(参数) 通过方法修改 my_car.update_odometer(45)
通过方法递增 对象.方法(增量) 增加属性值 my_car.increment_odometer(100)
继承 class 子类(父类): 创建子类 class ElectricCar(Car):
调用父类方法 super().init() 初始化父类 super().init(make, model, year)
添加子类属性 self.新属性 = 值 子类特有属性 self.battery_size = 40
重写方法 def 方法名(self): 覆盖父类方法 def fill_gas_tank(self):
导入单个类 from 文件 import 类 导入一个类 from car import Car
导入多个类 from 文件 import 类1, 类2 导入多个类 from car import Car, ElectricCar
给类起别名 from 文件 import 类 as 别名 使用别名 from car import ElectricCar as EC
🎉 系列完结感言
亲爱的读者朋友们,

当我写下这些文字时,意味着这个Python学习七天系列要和大家说再见了。回顾这七天的学习旅程:

第一天:注释、数据类型、循环——我们迈出了第一步

第二天:列表的增删改查——掌握了最常用的数据结构

第三天:range()、切片、元组——学会了更灵活的操作

第四天:条件判断与字典——让程序有了"决策能力"

第五天:用户输入与while循环——程序开始和人对话

第六天:函数与参数传递——学会了代码复用

第七天:类与面向对象编程——用代码描述现实世界

这一路走来,我们从零开始,一步步构建起Python编程的基础知识体系。每一行代码,每一个示例,都是成长的足迹。

为什么要学习编程?

编程不仅仅是写代码,更是一种思维方式。它教会我们如何拆解问题、如何逻辑思考、如何用系统的方案解决实际问题。无论你将来是否从事编程相关工作,这种思维方式都会让你受益终身。

接下来该往哪里走?

如果你完成了这个系列的学习,恭喜你!你已经掌握了Python的基础。接下来你可以:

选择方向深入学习:

Web开发(Django/Flask)

数据分析(Pandas/NumPy)

人工智能(TensorFlow/PyTorch)

自动化脚本(爬虫、办公自动化)

动手做项目:

个人博客系统

数据分析报告

小游戏开发

自动化办公工具

参与社区:

在CSDN、掘金等技术社区分享你的学习心得

参与开源项目

帮助其他初学者

最后的最后

感谢你一路相伴,跟着这个系列一起学习。如果我的笔记对你有一点点帮助,那就是我最大的快乐。

编程之路很长,但每一步都算数。希望你在未来的学习旅程中,保持好奇心,保持耐心,享受解决问题的乐趣。

我们江湖再见!

📌 互动提示:如果你在学习过程中有任何问题,或者想分享你的学习成果,欢迎在评论区留言!这个系列结束了,但我们的学习永远不会结束。加油,未来的程序员!👋

系列文章回顾:

🐍 Python学习第一天:从零开始的基础语法

🐍 Python学习第二天:列表的增删改查与操作技巧

🐍 Python学习第三天:循环、range()与切片技巧

🐍 Python学习第四天:条件判断与字典操作

🐍 Python学习第五天:用户输入与while循环

🐍 Python学习第六天:函数与参数传递

🐍 Python学习第七天:类与面向对象编程(完结篇)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐