news 2026/6/12 9:38:19

Python 类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 类

类(Class)是 Python 面向对象编程(OOP)的核心,类 = 属性 + 方法。用最通俗的话说:类是 "设计图纸",对象是 "按图纸造出来的具体产品"

一、先搞懂最核心的关系

  • 类(图纸):抽象的模板,定义了一类事物共有的特征和能做的事
  • 对象(汽车):根据图纸造出来的具体实例,每个对象都有自己的独特属性
  • 例子:
    • 类:人类 → 对象:你、我、张三
    • 类:手机 → 对象:你的 iPhone、我的华为
    • 类:汽车 → 对象:红色的特斯拉、黑色的奔驰

二、最简单的类:定义一辆 "基础汽车"

# 定义类(画图纸),类名首字母大写(行业规范) class Car: # 1. 属性:描述事物的特征(变量) brand = "未知品牌" # 品牌 color = "白色" # 颜色 speed = 0 # 当前速度 # 2. 方法:描述事物能做的事(函数) def run(self): self.speed += 20 print(f"汽车启动,当前速度:{self.speed}km/h") def stop(self): self.speed = 0 print("汽车停下了") # 实例化(造车):根据图纸造一辆具体的车 my_car = Car() # 使用对象:调用属性和方法 print(my_car.color) # 输出:白色 my_car.run() # 输出:汽车启动,当前速度:20km/h my_car.stop() # 输出:汽车停下了

关键知识点:self是什么?

self当前对象自己的代名词,就像 "我"。

  • 类里的所有方法,第一个参数必须是self(名字可以改,但行业默认用 self)
  • 调用方法时,不需要手动传self,Python 会自动把当前对象传进去
  • self.属性名可以访问当前对象的属性

三、构造函数:造车时就定制属性

上面的车出厂都是白色、未知品牌,很不灵活。用 ** 构造函数__init__** 可以在造车时就指定属性:

class Car: # 构造函数:创建对象时自动执行,专门用来初始化属性 def __init__(self, brand, color, max_speed=180): # 实例属性:每个对象自己独有的属性 self.brand = brand # 传入的品牌赋值给当前对象的brand self.color = color # 传入的颜色赋值给当前对象的color self.max_speed = max_speed # 最高速度,有默认值 self.speed = 0 # 初始速度都是0 def run(self): if self.speed < self.max_speed: self.speed += 30 print(f"{self.color}的{self.brand}加速到{self.speed}km/h") else: print(f"已经到最高速度{self.max_speed}km/h,不能再快了!") # 造三辆不同的车 tesla = Car("特斯拉", "红色") benz = Car("奔驰", "黑色", 220) bmw = Car("宝马", "蓝色") # 每辆车的属性都是独立的 print(tesla.color) # 红色 print(benz.max_speed) # 220 tesla.run() # 红色的特斯拉加速到30km/h benz.run() # 黑色的奔驰加速到30km/h

四、实例属性 vs 类属性

1. 实例属性(刚才讲的)

  • 属于单个对象,每个对象的值可以不同
  • 定义在__init__里,用self.访问
  • 例子:每辆车的颜色、品牌

2. 类属性

  • 属于整个类,所有对象共享同一个值
  • 定义在类内部、方法外部
  • 例子:所有汽车都有 4 个轮子
class Car: # 类属性:所有汽车共享 wheels = 4 def __init__(self, brand, color): self.brand = brand self.color = color # 类属性可以通过类名或对象访问 print(Car.wheels) # 4 print(Car("特斯拉", "红色").wheels) # 4 # 修改类属性,所有对象都会受影响 Car.wheels = 6 print(Car("奔驰", "黑色").wheels) # 6

五、继承:"儿子" 继承 "爸爸" 的本事

继承就是子类复用父类的所有属性和方法,还能添加自己独有的功能。就像:

  • 父类:汽车 → 子类:SUV、跑车、卡车
  • 父类:人类 → 子类:学生、老师、医生
# 父类(基类):汽车 class Car: def __init__(self, brand, color): self.brand = brand self.color = color self.speed = 0 def run(self): self.speed += 30 print(f"{self.color}的{self.brand}在公路上行驶,速度{self.speed}km/h") # 子类(派生类):SUV,继承自Car class SUV(Car): # 子类独有的属性和方法 def __init__(self, brand, color, seat_count=7): # 先调用父类的构造函数,继承父类的属性 super().__init__(brand, color) # 子类自己的属性 self.seat_count = seat_count # 子类独有的方法 def off_road(self): print(f"{self.color}的{self.brand}开启越野模式!") # 重写父类的方法(多态) def run(self): self.speed += 20 print(f"{self.color}的{self.brand}在山路行驶,速度{self.speed}km/h") # 使用子类 my_suv = SUV("路虎", "白色") my_suv.run() # 调用重写后的方法:白色的路虎在山路行驶,速度20km/h my_suv.off_road() # 调用子类独有的方法:白色的路虎开启越野模式! print(my_suv.seat_count) # 7

六、封装:把 "内部细节" 藏起来

封装就是只暴露必要的接口,隐藏内部实现。就像你开车只需要踩油门、刹车,不需要知道发动机怎么工作。

Python 中用 ** 单下划线_双下划线__** 表示私有:

  • _属性名:约定俗成的私有,告诉别人 "别随便改",但实际上还能改
  • __属性名:真正的私有,外部不能直接访问
class Car: def __init__(self, brand, color): self.brand = brand self.color = color self.__engine_temp = 90 # 发动机温度,私有属性,外部不能直接改 # 提供公开的方法来访问和修改私有属性 def get_engine_temp(self): return self.__engine_temp def set_engine_temp(self, temp): if 80 <= temp <= 100: self.__engine_temp = temp print("发动机温度已调整") else: print("温度异常,不能调整!") my_car = Car("丰田", "银色") # print(my_car.__engine_temp) # 报错,不能直接访问私有属性 print(my_car.get_engine_temp()) # 90 my_car.set_engine_temp(95) # 发动机温度已调整 my_car.set_engine_temp(150) # 温度异常,不能调整!

七、一句话总结核心

  • 类是模板,对象是实例
  • 属性是特征,方法是行为
  • self自己__init__初始化
  • 继承是复用,封装是隐藏,多态是重写

面向对象编程的本质就是:把现实世界的事物抽象成 "属性 + 方法" 的类,然后用对象来模拟现实世界的交互

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 9:34:57

Wish电商数据分析实战:从数据解剖到商业决策

1. 项目概述&#xff1a;这不是爬虫课&#xff0c;而是一次真实的电商数据解剖实验“Analyzing Wish E-Commerce Data [Hands-on]”——光看标题&#xff0c;很多人第一反应是“又一个教Python爬虫Pandas清洗的入门练习”。但我在Wish平台实操过37个SKU的全周期数据追踪、帮两家…

作者头像 李华
网站建设 2026/6/12 9:26:55

CANAPE一键启动周期报文发送配置包(含脚本/工程/命令行支持)

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;直接加载就能用的CANAPE自动化报文循环发送环境&#xff0c;核心是Script_1.cns脚本&#xff0c;可按毫秒级精度定时触发CAN或LIN总线报文发送&#xff1b;配套MyConfiguration.CNA和test.cnaxml已预设通道映射…

作者头像 李华
网站建设 2026/6/12 9:22:53

遗传算法进阶:收敛性诊断与工程化调优实战

1. 项目概述&#xff1a;为什么“遗传算法第二讲”比第一讲更值得你花时间啃透“遗传算法第二讲”这个标题乍看平平无奇&#xff0c;像是教科书里被翻旧了的章节编号。但如果你真把Part One当入门读物囫囵吞下&#xff0c;再打开Part Two时大概率会愣住——前一讲还在用纸笔画染…

作者头像 李华
网站建设 2026/6/12 9:21:11

Nacos五层数据模型:从Namespace到Instance详解

一个namespace配错&#xff0c;整个测试环境挂了&#xff1a;Nacos五层数据模型彻底讲透一个namespace引发的血案 “你把测试环境的配置发到生产去了。” 运维老张的声音很平静&#xff0c;但我知道他在压着火。 事情的经过很简单。我在 Nacos 控制台改了一个数据库连接池大小的…

作者头像 李华