📝 Day 1: Python基础 - 对话机器人与核心概念
学习日期: 2026-04-27
项目: 智能对话机器人
预计时间: 5-10分钟实践 + 15分钟理论学习
🎯 今天学到的内容
1. Python类与对象基础
✅ 什么是类(Class)
类就像是对象的"设计图纸",定义了对象的属性和方法。
class ConversationBot:
"""智能对话机器人"""
pass
✅ 对象的创建
# 创建机器人实例
bot = ConversationBot("AI学习助手")
2. 魔术方法 __init__
📖 核心概念
__init__= 初始化方法(Initialize)- 创建对象时自动调用
- 两边各2个下划线是Python的固定语法,叫做"魔术方法"
💡 作用
class ConversationBot:
def __init__(self, name):
self.name = name # 设置名字
self.conversation_history = [] # 初始化对话历史为空列表
类比理解:
__init__ 就像4S店交车前的准备工作,自动帮您把车设置好!🚗
- 买 Tesla → 设置品牌、颜色、里程归零
- 创建 ConversationBot → 设置名字、初始化对话历史
3. 魔术变量 __name__
🔍 核心问题
__name__ 没有声明就能直接使用,这是Python的内部规定!
💡 __name__ == "__main__" 的作用
if __name__ == "__main__":
main()
两种运行方式:
| 运行方式 | __name__ 的值 | 是否执行 main() |
|---|---|---|
直接运行: python day01_conversation_bot.py | "__main__" | ✅ 执行 |
被导入: import day01_conversation_bot | "day01_conversation_bot" | ❌ 不执行 |
为什么要这样写?
- 直接运行 → 运行完整程序
- 被其他文件导入 → 只使用类/函数,不运行主程序
类比: 餐厅营业(直接运行)提供堂食,外卖(被导入)只带走食物 🍽️
4. self 参数的奥秘
❓ 常见困惑
定义时:
def greet(self, user_name): # ← 看起来有2个参数
调用时:
bot.greet("Tom") # ← 只传了1个参数!self去哪了?
✅ 答案
self自动传递,不需要手动传!self就是对象自己
bot.greet("Tom")
# Python 内部转换为:
ConversationBot.greet(bot, "Tom")
# ↑ self 就是 bot 本身!
🧪 验证实验
class ConversationBot:
def __init__(self, name):
print(f"__init__ 的 self 地址: {id(self)}")
def greet(self, user_name):
print(f"greet 的 self 地址: {id(self)}")
bot = ConversationBot("AI助手")
print(f"bot 对象的地址: {id(bot)}")
bot.greet("Tom")
# 输出:三个地址完全一样!
记忆口诀: "定义带 self,调用不带 self"
🛠️ 实战项目:智能对话机器人
项目结构
class ConversationBot:
def __init__(self, name):
"""初始化方法 - 创建对象时自动调用"""
self.name = name
self.conversation_history = []
def greet(self, user_name):
"""问候用户"""
message = f"你好 {user_name}! 我是 {self.name},很高兴认识你!"
self.conversation_history.append(message)
return message
def respond(self, user_input):
"""根据关键词回复"""
user_input = user_input.lower()
if 'hello' in user_input or 'hi' in user_input:
response = "Hello! 今天想学点什么?"
elif 'python' in user_input:
response = "Python是一门超棒的语言!🚀"
elif 'bye' in user_input:
response = "再见!期待明天继续学习!"
else:
response = f"告诉我更多关于 '{user_input}' 的信息?"
self.conversation_history.append(f"你: {user_input}")
self.conversation_history.append(f"机器人: {response}")
return response
def get_history(self):
"""获取对话历史"""
return self.conversation_history
def main():
"""主程序 - 程序入口"""
bot = ConversationBot("AI学习助手")
user_name = input("请输入你的名字: ")
print(bot.greet(user_name))
while True:
user_input = input("\n你: ")
if user_input.lower() == 'bye':
break
print(f"\n{bot.name}: {bot.respond(user_input)}")
# 程序入口
if __name__ == "__main__":
main()
运行方式
cd d:\WorkSpace\Python\python_learn
.\.venv\Scripts\Activate.ps1
python day01_conversation_bot.py
🎓 关键知识点总结
魔术方法与魔术变量
| 名称 | 类型 | 谁创建? | 作用 |
|---|---|---|---|
__init__ | 方法 | 您定义,Python调用 | 初始化对象 |
__name__ | 变量 | Python自动创建 | 判断运行方式 |
"__main__" | 字符串 | Python自动赋值 | 表示"直接运行" |
命名规则:
name→ 普通变量(您定义)_name→ 私有变量(建议不外部访问)__name__→ Python内置(系统自动创建)
方法参数传递
# 定义方法
def greet(self, user_name):
# self = 对象自己(自动传递)
# user_name = 实际参数(手动传递)
pass
# 调用方法
bot.greet("Tom")
# Python 自动传递: self = bot, user_name = "Tom"
记忆要点:
- 定义时第一个参数必须是
self - 调用时不需要传
self - 访问属性必须用
self.xxx
💡 今天的学习收获
✅ 掌握了
- Python 类的基本结构
__init__初始化方法的作用__name__ == "__main__"的用法self参数的自动传递机制
🤔 理解难点
- 魔术方法的命名规则
self在定义和调用时的差异- Python 内部自动处理机制
🚀 实践成果
- ✅ 完成了第一个Python项目
- ✅ 实现了交互式对话功能
- ✅ 学会了面向对象编程基础
📚 扩展阅读
Python魔术方法
__init__- 对象初始化__str__- 打印对象时调用__len__- len()函数调用时__del__- 对象删除时调用
相关资源
🎯 明日预告:待办事项管理器
将学习:
- 列表操作与推导式
- 字典的使用
- 文件读写操作
- JSON数据格式
项目: 创建一个能保存待办事项的命令行工具
💭 学习心得
"今天通过动手实践,我理解了Python面向对象的基础概念。
虽然__init__、__name__、self这些概念一开始有点绕,
但通过实际运行代码和实验验证,我逐渐理解了它们的作用。
Python的设计真的很巧妙,自动化了很多操作,让编码更简洁!"
完整代码: python-ai-learning/day01_conversation_bot.py at main · duquanyong/python-ai-learning
⭐ 如果这篇笔记对您有帮助,请点赞支持! ⭐
"学习编程最好的时间是十年前,其次是现在。"