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']}居住"
相关推荐
破茧蝴蝶7 小时前
Python分布式爬虫完整教程
开发语言·python
benchmark_cc7 小时前
量化系统架构设计:为什么应该将数据获取与策略逻辑解耦?
python·数据分析·pandas·量化交易·股票数据·quantdash
狗凯之家源码网7 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
凤山老林7 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
小白快快跑哦8 小时前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
远离UE48 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience8 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
Thinker QAQ8 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
道满科技8 小时前
Function Calling 参数总出错?只修参数就行
linux·windows·python
栈帧之外9 小时前
【C++】STL之set
开发语言·c++