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']}居住"
相关推荐
艾斯特_8 小时前
工作流与多Agent协作:LangGraph、MCP和A2A的应用分层
人工智能·python·ai
IT小盘8 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
我叫黑大帅9 小时前
add()和 __add__() 写法哪个更好呢?
后端·python·面试
不如语冰9 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
柠檬味的Cat9 小时前
GEO优化系统哪个渠道商好
大数据·人工智能·python
青春不败 177-3266-05209 小时前
基于Python实现的深度学习技术在水文水质领域应用
python·深度学习·机器学习·水文水资源·水质模型
阿童木写作9 小时前
Python批量翻译亚马逊商品图实战教程
开发语言·python·xcode
砚底藏山河9 小时前
多家股票数据接口对比、企业级股票数据API
java·python·金融·maven
Dxy123931021610 小时前
Python Socket入门学习
python
会飞的大鱼人10 小时前
一文搞懂 Java HashSet:把它想成游乐园里只允许一次入场的盖章名单
java·开发语言·windows