本文最后更新于85 天前,其中的信息可能已经过时,如有错误请发送邮件到 2915475627@qq.com
Python上手学习的时候对于不同流式格式返回,遇到了 chunk[‘content’] 和 chunk.content ,直接把我绕晕了,单独把类与字典,以及他们对应的格式梳理一下。
类
类的内部需要定义属性和方法,而且属性通常是在类的初始化方法里一起定义的。
class Person:
def __init__(self, name):
# 定义属性
self.name = name
def say_hi(self):
# 定义方法
print(f"Hi, my name is {self.name}")
类调用属性和方法都用点。
# 创建对象
p = Person("Alice")
# 访问属性
print(p.name)
# 调用方法
p.say_hi()
那么 Python 类的属性有没有公有或私有呢?
答案是 of cource,通过名称代表是私有还是公有,但是私有不强制无法访问。
| 类型 | 写法 | 是否强制 | 说明 |
|---|---|---|---|
| 公有 | self.name |
❌ 不强制 | 大家都能访问 |
| “私有” | self.__name |
❌ 不强制 | 只是名称改写 |
但是 __name 会被自动重命名
class Person:
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
p = Person("Alice")
print(p.get_name()) # ✅ 推荐方式
print(p.__name) # ❌ 会报错
print(p._Person__name) # ✅ 仍然能访问(只是不方便)
抽象类
python 的抽象类要引入额外包,然后使抽象类继承 ABC
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
@abstractmethod
def move(self):
pass
字典
字典就是 Python 中处理键值对的数据结构。
可以直接用来接收 JSON 格式数据,例如:
data = {"messages": ["Hello"]}
通过 data[‘message’] 可以访问 ‘message’ 键的值
print(data['message'] )
data[‘message’] 等价于 data[‘message’],两种写法都支持。一般要求项目上前后统一,大多数情况打单引号可以少按 shift ;表示 JSON 时常用双引号,data = {“messages”: [“Hello”]} 。
TypedDict
TypedDict 就是有类型限制的 dict 字典。
from typing import TypedDict
class User(TypedDict):
id: int
name: str
TypedDict不是字典吗,为什么是用类定义的?
因为 TypedDict 需要类型系统的检查,所以用这么一个类起到检查的作用。实际用再另外用字典,dict u 和类型 User 没有实例化的关系。
实际使用
为什么 LangGraph 的 State 选用 TypedDict,而不是 data class?
因为返回体是 JSON,dict 支持转换,class 转换要再包一层。