Day 1: Python基础 - 对话机器人与核心概念

4 阅读4分钟

📝 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"

记忆要点:

  1. 定义时第一个参数必须是 self
  2. 调用时不需要传 self
  3. 访问属性必须用 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


⭐ 如果这篇笔记对您有帮助,请点赞支持! ⭐

"学习编程最好的时间是十年前,其次是现在。"