[特殊字符] Python学习第六天:类与面向对象编程(完结篇)
👋 大家好!这是我学习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学习第七天:类与面向对象编程(完结篇)
更多推荐

所有评论(0)