面向对象
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']}居住"