python的类&继承

你可以把 Python 的 class 理解成"自定义一种对象类型"。对象里面可以有数据,也可以有行为。

1. class 是什么

比如我们定义一个 Dog

py 复制代码
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name}: 汪!")

使用它:

py 复制代码
dog = Dog("Momo", 3)

print(dog.name)  # Momo
print(dog.age)   # 3
dog.bark()       # Momo: 汪!

这里有几个关键点:

  • class Dog: 定义了一个类。
  • dog = Dog("Momo", 3) 创建了一个对象,也叫实例。
  • __init__ 是初始化方法,创建对象时自动执行。
  • self 指当前这个对象本身。
  • self.name = name 是把数据存到对象身上。

所以:

py 复制代码
dog.name

访问的是这个具体对象的 name

2. self 是什么

self 不是关键字,但大家约定都叫 self

当你写:

py 复制代码
dog.bark()

Python 实际上差不多是在帮你调用:

py 复制代码
Dog.bark(dog)

所以方法里的第一个参数 self,就是正在调用这个方法的对象。

再看一个简单例子:

py 复制代码
class Counter:
    def __init__(self):
        self.value = 0

    def add_one(self):
        self.value += 1

使用:

py 复制代码
c = Counter()
c.add_one()
c.add_one()

print(c.value)  # 2

self.value 保存在对象内部,所以每个对象都有自己的状态。

3. 继承是什么

继承就是:一个类可以基于另一个类扩展。

比如:

py 复制代码
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(f"{self.name} is eating")


class Dog(Animal):
    def bark(self):
        print(f"{self.name}: 汪!")

使用:

py 复制代码
dog = Dog("Momo")

dog.eat()   # Momo is eating
dog.bark()  # Momo: 汪!

Dog 继承了 Animal,所以 Dog 自动拥有 Animaleat() 方法。

关系是:

复制代码
Animal 是父类 / 基类
Dog 是子类 / 派生类

4. 子类覆盖父类方法

如果子类定义了和父类同名的方法,就会覆盖父类的方法:

py 复制代码
class Animal:
    def speak(self):
        print("some sound")


class Dog(Animal):
    def speak(self):
        print("汪!")

使用:

py 复制代码
animal = Animal()
dog = Dog()

animal.speak()  # some sound
dog.speak()     # 汪!

这叫方法重写,英文叫 override。

5. super 是什么

如果子类想在父类初始化逻辑基础上继续扩展,可以用 super()

py 复制代码
class Animal:
    def __init__(self, name):
        self.name = name


class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

使用:

py 复制代码
dog = Dog("Momo", "柴犬")

print(dog.name)   # Momo
print(dog.breed)  # 柴犬

这里:

py 复制代码
super().__init__(name)

意思是:先调用父类 Animal 的初始化方法,把 name 设置好。

6. TypedDict 是什么

TypedDict 是 Python 里用来描述"字典结构"的类型工具。

比如普通字典:

py 复制代码
user = {
    "name": "Alice",
    "age": 20
}

如果你想告诉类型检查器:这个字典应该有 nameage,可以写:

py 复制代码
from typing import TypedDict

class User(TypedDict):
    name: str
    age: int

然后:

py 复制代码
user: User = {
    "name": "Alice",
    "age": 20
}

这表示 user 应该是这样的结构:

py 复制代码
{
  "name": str,
  "age": int
}

注意:TypedDict 主要是给类型检查工具看的,比如 Pyright、mypy、IDE。它不会在运行时强制检查。

也就是说:

py 复制代码
user: User = {
    "name": "Alice",
    "age": "not a number"
}

Python 运行时不一定报错 ,但类型检查器会提醒你:age 应该是 int

7. TypedDict 是 Python 原生的吗

答案稍微分版本:

  • Python 3.8+:TypedDict 在标准库 typing 里,可以这样用:
py 复制代码
from typing import TypedDict
  • Python 3.7 或更早:通常从 typing_extensions 导入:
py 复制代码
from typing_extensions import TypedDict

所以它是 Python 标准类型系统的一部分,但它不是普通意义上那种"运行时数据类"。它更像是一个"类型标注工具"。

8. TypedDict 和 class 的区别

这个很重要。

普通 class:

py 复制代码
class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

user = User("Alice", 20)

print(user.name)

TypedDict

py 复制代码
from typing import TypedDict

class User(TypedDict):
    name: str
    age: int

user: User = {"name": "Alice", "age": 20}

print(user["name"])

区别:

普通 class 创建真正的对象,用点号访问:user.name

TypedDict 描述字典结构,本质还是 dict,用方括号访问:user["name"]

你在 LangGraph 里看到的这种写法:

py 复制代码
class State(TypedDict):
    messages: list
    count: int

意思通常是:定义 graph 的状态结构。这个状态实际上传来传去还是一个字典:

py 复制代码
{
    "messages": [...],
    "count": 3
}

LangGraph 用它来知道 state 里有哪些字段,每个字段大概是什么类型。

这也是为什么学 LangGraph 前,理解 class、继承、TypedDict 会很有帮助。

相关推荐
tkevinjd37 分钟前
MiniCode 项目详解7:Memory 记忆系统
大数据·python·搜索引擎·llm·agent
郭老二1 小时前
【Python】Web框架 FastAPI 详解
python·fastapi
DFT计算杂谈1 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
敖行客 Allthinker1 小时前
docker容器安装Python反推镜像步骤(适用于临时调试用)
python·docker·容器
rrrjqy1 小时前
夏普比率与 Beta——Quant-for-Beginners 量化入门Task7
python·金融
min(a,b)3 小时前
学习第 6 天:类型注解、装饰器与高级特性
python·学习
兮动人3 小时前
Python字符串类型
开发语言·python·python字符串类型
码云骑士3 小时前
80-指令微调Instruction-Tuning-指令数据构造-多任务训练-过拟合检测
python
爱昏羔4 小时前
上篇:从PDF到向量库 — 物流行业RAG系统的知识库构建全解析
python·langchain·pdf·agent·rag
Sagittarius_A*4 小时前
[LitCTF2026] lit_xor_two_story
python·算法·密码学