课程概述
本教程将通过一个简单的购物车项目,带领大家从零开始学习 python 中的类(class)和对象(object)概念。我们将采用"跟着做"的方式,每一步都会解释相关的 python 语法和概念,确保初学者能够理解并跟随。
准备工作
在开始之前,请确保你已经安装了 python,并能够运行 python 脚本。如果你还没有安装 python,可以访问 python 官网 下载并安装最新版本。
第一课:创建你的第一个类 - 商品类
学习目标
- 理解什么是类和对象
- 学习如何定义一个简单的类
- 学习如何创建类的实例(对象)
- 学习如何访问对象的属性
实践步骤
步骤 1:创建项目文件
首先,创建一个名为 shopping_cart.py 的文件,这将是我们的项目文件。
步骤 2:定义商品类
在 shopping_cart.py 文件中,输入以下代码:
# class 是定义类的关键字,goods 是类名,按照惯例使用大驼峰命名法(每个单词首字母大写)
class goods:
# __init__ 是一个特殊方法,称为构造函数,在创建对象时自动调用
# self 代表对象本身,是一个特殊的参数,必须在其他参数之前
# name, price, quantity 是创建对象时需要提供的参数
def __init__(self, name, price, quantity):
# self.name = name 将传入的 name 参数值赋给对象的 name 属性
# 属性是对象的数据,通过 self.属性名 的方式定义和访问
self.name = name
self.price = price
self.quantity = quantity
步骤 3:创建商品对象
现在,让我们创建一些商品对象。在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建一个商品对象
# 类名(参数列表) 的方式创建对象,参数列表对应 __init__ 方法的参数
apple = goods("苹果", 5.99, 10)
# 创建另一个商品对象
banana = goods("香蕉", 3.99, 5)
步骤 4:访问对象属性
让我们访问刚刚创建的商品对象的属性。在 shopping_cart.py 文件的末尾,添加以下代码:
# 访问对象的属性
# 通过 对象.属性名 的方式访问对象的属性
# 通过 f"xxx{变量}" 格式化字符串
print(f"商品名称:{apple.name}") # 输出:商品名称:苹果
print(f"商品价格:{apple.price}") # 输出:商品价格:5.99
print(f"商品数量:{apple.quantity}") # 输出:商品数量:10
# 访问另一个商品的属性
print(f"商品名称:{banana.name}") # 输出:商品名称:香蕉
print(f"商品价格:{banana.price}") # 输出:商品价格:3.99
print(f"商品数量:{banana.quantity}") # 输出:商品数量:5
步骤 5:运行程序
保存文件,然后在命令行中运行以下命令:
python shopping_cart.py
你应该会看到以下输出:
商品名称:苹果
商品价格:5.99
商品价格:5.99
商品数量:10
商品名称:香蕉
商品价格:3.99
商品数量:5
知识点总结
- 类(class):类是创建对象的蓝图或模板,定义了对象的属性和方法。
- 对象(object):对象是根据类创建的具体实例,每个对象有自己独立的属性值。
- 构造函数
__init__:这是一个特殊方法,在创建对象时自动调用,用于初始化对象的属性。 - self 参数:代表对象本身,是一个特殊的参数,必须在其他参数之前。
- 对象属性:对象的数据,通过
self.属性名的方式定义和访问,通过对象.属性名的方式访问。
第二课:为商品类添加字符串表示方法
学习目标
- 学习
__str__特殊方法的作用 - 学习如何定义对象的字符串表示
- 理解为什么需要
__str__方法
实践步骤
步骤 1:添加__str__方法
在 goods 类中,添加 __str__ 方法。修改你的 shopping_cart.py 文件如下:
class goods:
def __init__(self, name, price, quantity):
self.name = name
self.price = price
self.quantity = quantity
# __str__ 是一个特殊方法,用于定义对象的字符串表示
# 当我们使用 print() 函数打印对象时,python 会自动调用这个方法
def __str__(self):
# f"..." 是 f-string(格式化字符串),允许我们在字符串中嵌入变量
# {self.name} 在字符串中插入对象的 name 属性值
# return 关键字用于返回值,这里返回格式化后的字符串
return f"商品名称:{self.name}, 价格:{self.price}, 数量:{self.quantity}"
步骤 2:测试__str__方法
在 shopping_cart.py 文件的末尾,添加以下代码:
# 打印对象(会自动调用__str__方法) print(apple) # 输出:商品名称:苹果, 价格:5.99, 数量:10 print(banana) # 输出:商品名称:香蕉, 价格:3.99, 数量:5
步骤 3:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到以下输出:
商品名称:苹果, 价格:5.99, 数量:10
商品名称:香蕉, 价格:3.99, 数量:5
知识点总结
__str__方法:这是一个特殊方法,用于定义对象的字符串表示。- 自动调用:当我们使用
print()函数打印对象时,python 会自动调用这个方法。 - f-string:格式化字符串,允许我们在字符串中嵌入变量,语法为
f"文本{变量}"。 - 可读性:
__str__方法使得对象可以以一种可读的方式显示。
第三课:为商品类添加编辑方法
学习目标
- 学习如何定义类的方法
- 理解方法如何操作对象的属性
- 学习如何调用对象的方法
实践步骤
步骤 1:添加edit方法
在 goods 类中,添加 edit 方法。修改你的 shopping_cart.py 文件如下:
class goods:
def __init__(self, name, price, quantity):
self.name = name
self.price = price
self.quantity = quantity
def __str__(self):
return f"商品名称:{self.name}, 价格:{self.price}, 数量:{self.quantity}"
# edit 是自定义方法,用于修改商品的属性
# 方法是定义在类中的函数,用于操作对象的数据
def edit(self, name, price, quantity):
# 更新对象的属性
self.name = name
self.price = price
self.quantity = quantity
步骤 2:测试edit方法
在 shopping_cart.py 文件的末尾,添加以下代码:
# 打印修改前的商品信息
print("修改前:")
print(apple) # 输出:商品名称:苹果, 价格:5.99, 数量:10
# 修改商品属性
# 通过 对象.方法名(参数列表) 的方式调用对象的方法
apple.edit("红富士苹果", 6.99, 15)
# 打印修改后的商品信息
print("修改后:")
print(apple) # 输出:商品名称:红富士苹果, 价格:6.99, 数量:15
步骤 3:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到以下输出:
修改前:
商品名称:苹果, 价格:5.99, 数量:10
修改后:
商品名称:红富士苹果, 价格:6.99, 数量:15
知识点总结
- 类的方法:定义在类中的函数,用于操作对象的数据。
- 方法调用:通过
对象.方法名(参数列表)的方式调用对象的方法。 - 属性修改:方法可以修改对象的属性,通过
self.属性名 = 新值的方式。 - 封装:将数据和操作数据的方法组织在一起,是面向对象编程的核心概念之一。
第四课:创建购物车类
学习目标
- 学习如何创建一个包含多个对象的类
- 理解对象之间的关系
- 学习如何使用列表存储多个对象
实践步骤
步骤 1:定义购物车类
在 shopping_cart.py 文件中,添加 shoppingcart 类。修改你的文件如下:
class shoppingcart:
# 构造函数,初始化购物车
def __init__(self):
# self.goods_list = [] 定义一个空列表,用于存储商品对象
# 列表是 python 中的一种数据类型,用于存储多个值
# [] 表示空列表
self.goods_list = []
步骤 2:创建购物车对象
在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建购物车对象 my_cart = shoppingcart()
步骤 3:添加商品到购物车
我们需要添加一个方法,将商品添加到购物车中。在 shoppingcart 类中,添加 add_goods 方法:
class shoppingcart:
def __init__(self):
self.goods_list = []
# add_goods 方法用于向购物车添加商品
def add_goods(self, goods):
# for 循环用于遍历序列(如列表)
# for good in self.goods_list: 遍历购物车中的每个商品
# good 是循环变量,代表当前遍历到的商品
for good in self.goods_list:
# if 条件语句,用于判断条件是否为真
# if good.name == goods.name: 检查商品名称是否相同
# == 是比较运算符,用于比较两个值是否相等
if good.name == goods.name:
# print 函数用于输出文本到控制台
print("商品已存在!")
# return 语句用于退出函数并返回值
# return false 表示操作失败
return false
# append 是列表的方法,用于在列表末尾添加元素
# self.goods_list.append(goods) 将商品添加到购物车列表
self.goods_list.append(goods)
print("商品添加成功!")
# return true 表示操作成功
return true
步骤 4:测试添加商品功能
在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建购物车对象
my_cart = shoppingcart()
# 创建商品对象
apple = goods("苹果", 5.99, 10)
banana = goods("香蕉", 3.99, 5)
# 添加商品到购物车
my_cart.add_goods(apple) # 输出:商品添加成功!
my_cart.add_goods(banana) # 输出:商品添加成功!
# 尝试添加已存在的商品
my_cart.add_goods(apple) # 输出:商品已存在!
步骤 5:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到以下输出:
商品添加成功!
商品添加成功!
商品已存在!
知识点总结
- 列表(list):python 中的一种数据类型,用于存储多个值,使用
[]表示。 - 列表方法:
append()方法用于在列表末尾添加元素。 - for 循环:用于遍历序列(如列表),语法为
for 变量 in 序列:。 - 条件语句:
if语句用于执行条件判断,语法为if 条件:。 - 比较运算符:
==用于比较两个值是否相等。
第五课:实现修改商品功能
学习目标
- 学习如何修改购物车中的商品
- 学习异常处理的基本概念
- 学习如何获取用户输入
实践步骤
步骤 1:添加edit_goods方法
在 shoppingcart 类中,添加 edit_goods 方法:
# edit_goods 方法用于修改购物车中商品的信息
def edit_goods(self, name):
# 遍历购物车中的每个商品
for good in self.goods_list:
# 检查商品名称是否匹配
if good.name == name:
# try-except 是异常处理结构
# try 块中包含可能引发异常的代码
try:
# input 函数用于获取用户输入
# float 函数将字符串转换为浮点数
new_price = float(input("请输入修改后商品价格:"))
# int 函数将字符串转换为整数
new_quantity = int(input("请输入修改后商品数量:"))
# except 块用于捕获和处理异常
# valueerror 是当转换失败时引发的异常
except valueerror:
print("输入错误,请重新输入!")
return false
# 调用商品的 edit 方法修改属性
good.edit(name, new_price, new_quantity)
print("商品已修改!")
return true
# 如果遍历完所有商品都没有找到匹配的商品
print("商品不存在!")
return false
步骤 2:测试修改商品功能
在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建购物车对象
my_cart = shoppingcart()
# 创建商品对象并添加到购物车
apple = goods("苹果", 5.99, 10)
my_cart.add_goods(apple)
# 修改苹果的价格和数量
my_cart.edit_goods("苹果")
# 程序会提示输入价格和数量
# 例如输入:6.99 和 15
# 尝试修改不存在的商品
my_cart.edit_goods("橙子") # 输出:商品不存在!
步骤 3:运行程序
保存文件,然后运行程序:
python shopping_cart.py
程序会提示你输入新的价格和数量,输入后你应该会看到以下输出:
请输入修改后商品价格:6.99
请输入修改后商品数量:15
商品已修改!
商品不存在!
知识点总结
- 用户输入:
input()函数用于获取用户输入,返回一个字符串。 - 类型转换:
float()和int()函数用于将字符串转换为浮点数和整数。 - 异常处理:
try-except结构用于捕获和处理可能发生的错误。 - 方法调用:对象可以调用其他对象的方法,如
good.edit()。
第六课:实现删除商品功能
学习目标
- 学习如何从购物车中删除商品
- 学习列表的
remove方法
实践步骤
步骤 1:添加remove_goods方法
在 shoppingcart 类中,添加 remove_goods 方法:
# remove_goods 方法用于从购物车中删除商品
def remove_goods(self, name):
# 遍历购物车中的每个商品
for good in self.goods_list:
# 检查商品名称是否匹配
if good.name == name:
# remove 是列表的方法,用于删除指定的元素
self.goods_list.remove(good)
print("商品已删除!")
return true
# 如果遍历完所有商品都没有找到匹配的商品
print("商品不存在!")
return false
步骤 2:测试删除商品功能
在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建购物车对象
my_cart = shoppingcart()
# 创建商品对象并添加到购物车
apple = goods("苹果", 5.99, 10)
banana = goods("香蕉", 3.99, 5)
my_cart.add_goods(apple)
my_cart.add_goods(banana)
# 删除香蕉
my_cart.remove_goods("香蕉") # 输出:商品已删除!
# 尝试删除不存在的商品
my_cart.remove_goods("橙子") # 输出:商品不存在!
步骤 3:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到以下输出:
商品添加成功!
商品添加成功!
商品已删除!
商品不存在!
知识点总结
- 列表的
remove方法:用于删除列表中的指定元素。 - 遍历列表:使用
for循环遍历列表中的元素。 - 条件判断:使用
if语句检查条件是否满足。
第七课:实现查询商品功能
学习目标
- 学习如何查询购物车中的特定商品
- 学习如何使用
__str__方法显示对象信息
实践步骤
步骤 1:添加show_goods方法
在 shoppingcart 类中,添加 show_goods 方法:
# show_goods 方法用于查询购物车中的特定商品
def show_goods(self, name):
# 遍历购物车中的每个商品
for good in self.goods_list:
# 检查商品名称是否匹配
if good.name == name:
# 打印商品信息,会自动调用 goods 类的 __str__ 方法
print(good)
return true
# 如果遍历完所有商品都没有找到匹配的商品
print("商品不存在!")
return false
步骤 2:测试查询商品功能
在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建购物车对象
my_cart = shoppingcart()
# 创建商品对象并添加到购物车
apple = goods("苹果", 5.99, 10)
banana = goods("香蕉", 3.99, 5)
my_cart.add_goods(apple)
my_cart.add_goods(banana)
# 查询苹果
my_cart.show_goods("苹果") # 输出:商品名称:苹果, 价格:5.99, 数量:10
# 尝试查询不存在的商品
my_cart.show_goods("橙子") # 输出:商品不存在!
步骤 3:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到以下输出:
商品添加成功!
商品添加成功!
商品名称:苹果, 价格:5.99, 数量:10
商品不存在!
知识点总结
- 对象打印:打印对象时会自动调用其
__str__方法。 - 遍历查找:使用
for循环遍历列表,使用if语句查找匹配项。 - 提前返回:使用
return语句在找到匹配项后提前退出函数。
第八课:实现显示所有商品功能
学习目标
- 学习如何显示购物车中的所有商品
- 学习如何检查列表是否为空
实践步骤
步骤 1:添加show_all_goods方法
在 shoppingcart 类中,添加 show_all_goods 方法:
# show_all_goods 方法用于显示购物车中的所有商品
def show_all_goods(self):
# if 条件语句,检查购物车是否为空
# len(self.goods_list) 获取购物车中商品的数量
if len(self.goods_list) == 0:
print("购物车为空!")
# else 是 if 语句的可选部分,当条件为假时执行
else:
# 遍历购物车中的每个商品并打印
for good in self.goods_list:
print(good)
步骤 2:测试显示所有商品功能
在 shopping_cart.py 文件的末尾,添加以下代码:
# 创建购物车对象
my_cart = shoppingcart()
# 显示购物车中所有商品(应该为空)
my_cart.show_all_goods() # 输出:购物车为空!
# 创建商品对象并添加到购物车
apple = goods("苹果", 5.99, 10)
banana = goods("香蕉", 3.99, 5)
my_cart.add_goods(apple)
my_cart.add_goods(banana)
# 显示购物车中所有商品
my_cart.show_all_goods()
# 输出:
# 商品名称:苹果, 价格:5.99, 数量:10
# 商品名称:香蕉, 价格:3.99, 数量:5
步骤 3:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到以下输出:
购物车为空!
商品添加成功!
商品添加成功!
商品名称:苹果, 价格:5.99, 数量:10
商品名称:香蕉, 价格:3.99, 数量:5
知识点总结
- 列表长度:
len()函数用于获取列表的长度(元素数量)。 - 空列表检查:通过检查列表长度是否为 0 来判断列表是否为空。
- 条件语句:
if-else结构用于根据条件执行不同的代码块。 - 遍历列表:使用
for循环遍历列表中的所有元素。
第九课:创建用户交互界面
学习目标
- 学习如何创建一个简单的命令行界面
- 学习如何使用
while循环创建交互式程序 - 学习如何使用
match-case语句处理用户选择
实践步骤
步骤 1:创建主程序
在 shopping_cart.py 文件的末尾,添加以下代码:
# if __name__ == "__main__": 是一个特殊条件
# 当脚本直接运行时为真,当作为模块导入时为假
if __name__ == "__main__":
# 打印菜单界面
# 三引号 '''...''' 用于创建多行字符串
print("""
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 1、添加商品 2、修改商品 3、删除商品 4、查询商品 5、查看所有商品 6、退出 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
""")
# 创建购物车对象
cart = shoppingcart()
# while true: 创建一个无限循环,直到遇到 break 或 exit() 语句
while true:
# input 函数用于获取用户输入
choice = input("请输入您的操作:")
# match choice: 是 python 3.10+ 引入的模式匹配语法,类似于其他语言中的 switch-case
match choice:
# case "1": 当 choice 等于 "1" 时执行对应的代码块
case "1":
# try-except 是异常处理结构
try:
# 获取用户输入并转换为适当的数据类型
name = input("请输入商品名称:")
price = float(input("请输入商品价格:"))
quantity = int(input("请输入商品数量:"))
# 创建商品对象
goods = goods(name, price, quantity)
# 添加商品到购物车
cart.add_goods(goods)
# 捕获类型转换错误
except valueerror:
print("输入错误,请重新输入!")
# 修改商品
case "2":
name = input("请输入商品名称:")
cart.edit_goods(name)
# 删除商品
case "3":
name = input("请输入商品名称:")
cart.remove_goods(name)
# 查询商品
case "4":
name = input("请输入商品名称:")
cart.show_goods(name)
# 查看所有商品
case "5":
cart.show_all_goods()
# 退出程序
case "6":
print("谢谢使用!")
# exit 函数用于退出程序
exit()
# case _: 捕获所有未匹配的情况
case _:
print("输入错误,请重新输入!")
步骤 2:运行程序
保存文件,然后运行程序:
python shopping_cart.py
你应该会看到菜单界面,然后可以输入数字选择不同的操作。
知识点总结
if __name__ == "__main__"::这是一个特殊条件,当脚本直接运行时为真,当作为模块导入时为假。- 多行字符串:使用三引号
'''...'''或"""..."""创建多行字符串。 - 无限循环:
while true:创建一个无限循环,直到遇到break或exit()语句。 - 用户输入:
input()函数用于获取用户输入,返回一个字符串。 - 模式匹配:
match-case语句用于多条件匹配,python 3.10+ 引入的新特性。 - 异常处理:
try-except结构用于捕获和处理可能发生的错误。 - 退出程序:
exit()函数用于退出程序。
第十课:完整代码与测试
学习目标
- 整合所有功能,形成完整的购物车系统
- 测试所有功能是否正常工作
完整代码
以下是完整的 shopping_cart.py 代码:
# 商品类
class goods:
# 构造函数,初始化商品属性
def __init__(self, name, price, quantity):
self.name = name
self.price = price
self.quantity = quantity
# 字符串表示方法
def __str__(self):
return f"商品名称:{self.name}, 价格:{self.price}, 数量:{self.quantity}"
# 编辑商品方法
def edit(self, name, price, quantity):
self.name = name
self.price = price
self.quantity = quantity
# 购物车类
class shoppingcart:
# 构造函数,初始化购物车
def __init__(self):
self.goods_list = []
# 添加商品方法
def add_goods(self, goods):
for good in self.goods_list:
if good.name == goods.name:
print("商品已存在!")
return false
self.goods_list.append(goods)
print("商品添加成功!")
return true
# 修改商品方法
def edit_goods(self, name):
for good in self.goods_list:
if good.name == name:
try:
new_price = float(input("请输入修改后商品价格:"))
new_quantity = int(input("请输入修改后商品数量:"))
except valueerror:
print("输入错误,请重新输入!")
return false
good.edit(name, new_price, new_quantity)
print("商品已修改!")
return true
print("商品不存在!")
return false
# 删除商品方法
def remove_goods(self, name):
for good in self.goods_list:
if good.name == name:
self.goods_list.remove(good)
print("商品已删除!")
return true
print("商品不存在!")
return false
# 查询商品方法
def show_goods(self, name):
for good in self.goods_list:
if good.name == name:
print(good)
return true
print("商品不存在!")
return false
# 显示所有商品方法
def show_all_goods(self):
if len(self.goods_list) == 0:
print("购物车为空!")
else:
for good in self.goods_list:
print(good)
# 主程序
if __name__ == "__main__":
print("""
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 1、添加商品 2、修改商品 3、删除商品 4、查询商品 5、查看所有商品 6、退出 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
""")
cart = shoppingcart()
while true:
choice = input("请输入您的操作:")
match choice:
case "1":
try:
name = input("请输入商品名称:")
price = float(input("请输入商品价格:"))
quantity = int(input("请输入商品数量:"))
goods = goods(name, price, quantity)
cart.add_goods(goods)
except valueerror:
print("输入错误,请重新输入!")
case "2":
name = input("请输入商品名称:")
cart.edit_goods(name)
case "3":
name = input("请输入商品名称:")
cart.remove_goods(name)
case "4":
name = input("请输入商品名称:")
cart.show_goods(name)
case "5":
cart.show_all_goods()
case "6":
print("谢谢使用!")
exit()
case _:
print("输入错误,请重新输入!")
测试步骤
运行程序:
python shopping_cart.py
测试添加商品功能:
- 输入
1,然后按照提示输入商品信息 - 添加几个不同的商品
测试查看所有商品功能:输入 5,查看所有已添加的商品
测试查询商品功能:
- 输入
4,然后输入一个已存在的商品名称 - 输入
4,然后输入一个不存在的商品名称
测试修改商品功能:
- 输入
2,然后输入一个已存在的商品名称 - 按照提示修改商品的价格和数量
- 输入
5,查看修改后的商品信息
测试删除商品功能:
- 输入
3,然后输入一个已存在的商品名称 - 输入
5,确认商品已被删除 - 输入
3,然后输入一个不存在的商品名称
测试异常处理:
- 输入
1,然后尝试输入非数字的价格或数量 - 观察程序如何处理错误输入
退出程序:输入 6,退出程序
课程总结
通过这个购物车项目,我们学习了以下 python 核心概念:
类和对象:
- 类是创建对象的蓝图或模板
- 对象是根据类创建的具体实例
- 每个对象有自己独立的属性值
构造函数 __init__:
- 用于初始化对象的属性
- 在创建对象时自动调用
字符串表示方法 __str__:
- 定义对象的字符串表示
- 使用
print()打印对象时自动调用
方法:
- 定义在类中的函数
- 用于操作对象的数据
- 通过
self参数访问对象的属性
对象属性:
- 对象的数据
- 通过
self.属性名的方式定义和访问 - 通过
对象.属性名的方式访问
列表:
- 用于存储多个值
- 常用方法:
append(),remove() - 常用函数:
len()
条件语句:
if语句用于执行条件判断else语句在条件为假时执行
循环语句:
for循环用于遍历序列while循环用于重复执行代码块
异常处理:
try-except结构用于捕获和处理异常- 常见异常:
valueerror
用户输入和输出:
input()函数用于获取用户输入print()函数用于输出文本
模式匹配:
match-case语句用于多条件匹配- python 3.10+ 引入的新特性
这些是 python 编程的基础,掌握它们将为你进一步学习更复杂的 python 程序打下坚实的基础。继续练习和探索,你会发现 python 的强大之处!
以上就是使用python从零搭建购物车系统的实战教程的详细内容,更多关于python购物车系统的资料请关注代码网其它相关文章!
发表评论