02面向对象

面向对象

1. class --- 定义类

python 复制代码
class Student:
    pass   # pass 表示「暂时什么都不写」,占位用

类名通常用 大驼峰:Student、TodoItem

2. init --- 构造方法(初始化)

创建对象时,Python 会自动调用 init,用来给实例赋初始值:

python 复制代码
class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score
  • init 前后各两个下划线,是 Python 的特殊方法
  • 第一个参数必须是 self(代表「这个实例自己」)
  • self.name = name:把传入的 name 存到实例上
  • 调用实例方法时,Python 会自动把实例传给第一个参数 self
  • 你写 s.xxx() 时,里面的 self 就是 s

3. 继承

继承语法
python 复制代码
class Animal:          # 父类 / 基类
    ...

class Dog(Animal):     # 子类 / 派生类 --- 括号里写父类名
    ...

Dog 自动拥有 Animal 的属性和方法

子类复用父类的 init ------ super()
python 复制代码
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(f"{self.name} 在吃东西")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)   # 调用父类的 __init__,设置 self.name
        self.breed = breed       # 子类特有的属性

super() 的含义:调用父类的方法。

这里 super().init (name) = 让父类 Animal 帮你完成 self.name = name。

子类和父类有同名方法时,子类的版本会覆盖父类:

异常处理

try / except

python 复制代码
try:
    result = 10 / 0          # 可能出错的代码
except ZeroDivisionError:
    print("不能除以零!")     # 出错时执行这里
捕获多种异常
python 复制代码
try:
    num = int(input("输入数字:"))
    print(10 / num)
except ValueError:
    print("请输入有效数字")
except ZeroDivisionError:
    print("不能除以零")
捕获所有异常(慎用)
python 复制代码
except Exception as e:
    print(f"出错了:{e}")
else 和 finally
python 复制代码
try:
    result = 10 / 2
except ZeroDivisionError:
    print("不能除以零")
else:
    print(f"计算成功:{result}")   # 只有 try 里没出错才执行
finally:
    print("无论成败都会执行")      # 清理资源时常用

常见异常类型

异常 典型场景
ZeroDivisionError 除以 0
ValueError 类型转换失败,如 int("abc")
TypeError 类型不对,如 "hello" + 5
KeyError dict 里不存在的 key
IndexError list 越界,如 lst999
FileNotFoundError 文件不存在

模块

name

name :每个 .py 文件都有一个内置变量 name。

直接运行这个文件时(例如 python 18_exceptions.py),name 等于 "main "。

被别的文

类型注解

python 复制代码
def add(a: int, b: int) -> int:
    return a + b

常见类型写法

含义 写法(推荐 Python 3.9+) 写法(typing 模块,兼容旧版)
整数 int int
字符串 str str
布尔 bool bool
浮点 float float
列表 listint Listint
字典 dictstr, int Dictstr, int
可能为 None int | None Optionalint
python 复制代码
from typing import Optional, List, Dict

def safe_int(s: str) -> Optional[int]:
    ...
python 复制代码
from typing import Union

def safe_divide(a: str, b: str) -> Union[float, str, None]:
    ...
python 复制代码
from typing import TypedDict, 

class User(TypedDict):
    name: str
    city: str

def describe_user(user: User) -> str:
    return f"{user['name']}在{user['city']}居住"
相关推荐
qq_4069810311 分钟前
c++拷贝构造函数
开发语言·c++
AI源码31 分钟前
基于 Python 的汽车市场数据分析与可视化平台
python·数据分析·汽车
会飞锦鲤31 分钟前
基于 SVM + HOG 的铸造缺陷检测系统
python·opencv·机器学习·计算机视觉·缺陷检测·图像分类·svm
爱喝雪碧的可乐37 分钟前
MATLAB
开发语言·算法·matlab
starrysky8102 小时前
zipfile 中文乱码修复:把已知 GBK 旧 ZIP 解压到正确中文目录
python
用户91294046848422 小时前
Codex 从零到能交付(09):让 Codex 写有用的测试,而不是只测成功路径
python
2601_967987372 小时前
Debian如何配置Python调试工具
python·debian·pdb·调试工具·ipdb
MoRay2 小时前
放弃云端 Computer Use,我用 Python 手搓了一个带“物理防呆”的本地 GUI Agent 底座
python·github
H.莓飛2 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
青少儿编程课堂3 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:Bellman-Ford与SPFA含负权最短路及负环检测全解析
c++·python·算法·bfs·信息学竞赛