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 会很有帮助。

相关推荐
威联通网络存储1 小时前
TS-h3087XU-RP 汽车零部件质检追溯部署
python·汽车
你驴我1 小时前
WhatsApp 多账号场景下的会话归档与历史消息检索优化实践
后端·python
IT毕设实战小研1 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
harmful_sheep2 小时前
java group by常见用法
java·开发语言·python
whcyhhh2 小时前
头歌实践教学平台:数据科学与大数据技术导论(十六)
大数据·开发语言·python
宸津-代码粉碎机2 小时前
AI工程化高阶实战|从Demo到生产落地核心架构、全套源码与避坑指南
java·大数据·开发语言·人工智能·python·架构
郝学胜-神的一滴4 小时前
Effective Python 条款4:字符串格式化大乱斗
开发语言·网络·python·程序人生·软件工程
ynchyong4 小时前
Python 字符组合生成器:product 与 permutations 的实战对比
python·工具·字符串生产
benchmark_cc4 小时前
1000只ETF的5分钟K线如何批量获取?QuantDash分页策略与高性能Python实践
开发语言·人工智能·爬虫·python·算法·quantdash·量化数据源
sel_94 小时前
【PEFT】参数高效微调(PEFT)技术详解:从原理到 LoRA/QLoRA 实战
人工智能·python·深度学习·算法·机器学习·参数高效微调