Python 类 Class
在 Python 中,类(Class)是一种创建对象(Object)的模板,它允许我们定义对象的属性和方法。类是 Python 中实现面向对象编程(OOP)的核心结构。
定义一个类
定义一个类的基本语法如下:
class ClassName:def __init__(self, parameters):# 这里是初始化方法,相当于构造函数self.attribute = value
ClassName:类名,通常采用首字母大写的驼峰命名法。__init__:类的初始化方法,当创建类的新实例时会自动调用。它的第一个参数总是self,代表类的实例本身。
类属性和实例属性
- 类属性:由类的所有实例共享。
- 实例属性:每个类实例都有自己的独立拷贝。
class MyClass:class_attribute = 100 # 类属性def __init__(self, instance_attribute):self.instance_attribute = instance_attribute # 实例属性
类方法和实例方法
- 实例方法:方法的第一个参数是
self,表示类的实例。 - 类方法:使用
@classmethod装饰器,第一个参数是cls,表示类本身。
class MyClass:def instance_method(self):pass@classmethoddef class_method(cls):pass
静态方法
使用 @staticmethod 装饰器定义静态方法,静态方法不需要 self 或 cls 参数。
class MyClass:@staticmethoddef static_method():pass
创建类的实例
my_object = MyClass('some value')
访问属性和方法
# 访问实例属性
print(my_object.instance_attribute)# 访问实例方法
my_object.instance_method()# 访问类属性
print(MyClass.class_attribute)# 访问类方法
MyClass.class_method()# 访问静态方法
MyClass.static_method()
继承
Python 支持单一继承和多重继承。
class BaseClass:passclass DerivedClass(BaseClass):pass
多态
多态允许不同的对象对同一消息做出响应。
class BaseClass:def method(self):passclass DerivedClass(BaseClass):def method(self):passbase = BaseClass()
derived = DerivedClass()# 多态行为
base.method() # 调用 BaseClass 的 method
derived.method() # 调用 DerivedClass 的 method
封装
封装是将数据(属性)和代码(方法)捆绑在一起,并对外部隐藏内部实现的细节。
class MyClass:def __init__(self, value):self.__private_attribute = value # 私有属性@propertydef private_attribute(self):return self.__private_attribute@private_attribute.setterdef private_attribute(self, value):self.__private_attribute = value
特殊方法
Python 类可以定义一些特殊方法来响应 Python 执行的操作。
官方文档:Python Special method
| 方法名称 | 用途 | 示例 |
|---|---|---|
__init__(self, ...) | 构造器,创建实例时初始化对象。 | def __init__(self, name): self.name = name |
__del__(self) | 析构器,释放对象时调用。 | def __del__(self): print("Object destroyed") |
__str__(self) | 定义对象的可打印字符串表示,print() 时调用。 | def __str__(self): return "Instance of MyClass" |
__repr__(self) | 定义对象的官方字符串表示,用于调试。 | def __repr__(self): return "MyClass(name='John')" |
__len__(self) | 定义 len() 函数返回的对象大小。 | def __len__(self): return len(self.items) |
__getitem__(self, key) | 定义获取对象元素的行为,如 obj[key]。 | def __getitem__(self, key): return self.items[key] |
__setitem__(self, key, value) | 定义设置对象元素的行为,如 obj[key] = value。 | def __setitem__(self, key, value): self.items[key] = value |
__delitem__(self, key) | 定义删除对象元素的行为,如 del obj[key]。 | def __delitem__(self, key): del self.items[key] |
__iter__(self) | 定义对象迭代器,用于 for 循环。 | def __iter__(self): return iter(self.items) |
__next__(self) | 定义迭代器的下一个元素,用于 for 循环。 | def __next__(self): return next(self.items) |
__call__(self, ...) | 定义对象作为函数被调用时的行为。 | def __call__(self): print("Hello") |
__eq__(self, other) | 定义等于运算符 == 的行为。 | def __eq__(self, other): return self.name == other.name |
__ne__(self, other) | 定义不等于运算符 != 的行为。 | def __ne__(self, other): return self.name != other.name |
__lt__(self, other) | 定义小于运算符 < 的行为。 | def __lt__(self, other): return self.value < other.value |
__le__(self, other) | 定义小于等于运算符 <= 的行为。 | def __le__(self, other): return self.value <= other.value |
__gt__(self, other) | 定义大于运算符 > 的行为。 | def __gt__(self, other): return self.value > other.value |
__ge__(self, other) | 定义大于等于运算符 >= 的行为。 | def __ge__(self, other): return self.value >= other.value |
__getattr__(self, name) | 定义访问不存在属性时的行为。 | def __getattr__(self, name): return f"{name} not found" |
__setattr__(self, name, value) | 定义设置属性时的行为。 | def __setattr__(self, name, value): self.__dict__[name] = value |
__getattribute__(self, name) | 定义获取属性时的行为。 | def __getattribute__(self, name): return object.__getattribute__(self, name) |
__dir__(self) | 定义 dir() 函数返回的属性列表。 | def __dir__(self): return ["name", "age"] |
使用这些特殊方法,你可以自定义类的字符串表示、布尔值、长度等行为。
self和cls
在Python中,self和cls是用于类方法中的特殊参数,它们分别用于实例方法和类方法中。
| 特性 | self | cls |
|---|---|---|
| 用途 | 指向类的实例本身 | 指向类本身 |
| 方法类型 | 实例方法 | 类方法 |
| 访问范围 | 实例属性和实例方法 | 类属性和类方法 |
| 定义方式 | 不需要装饰器 | 使用@classmethod装饰器 |
| 示例 | def method(self): | @classmethod def method(cls): |
| 使用场景 | 需要访问或修改实例的属性和方法时 | 需要访问或修改类的属性和方法时 |
| 初始化 | 在实例化对象时自动传递 | 在调用类方法时自动传递 |
实例方法
class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")# 创建实例
person = Person("Alice", 30)
person.greet() # 输出: Hello, my name is Alice and I am 30 years old.
类方法
class Person:count = 0 # 类属性def __init__(self, name):self.name = namePerson.count += 1@classmethoddef get_count(cls):return cls.count# 创建实例
person1 = Person("Alice")
person2 = Person("Bob")print(Person.get_count()) # 输出: 2
相关文章:
Python 类 Class
在 Python 中,类(Class)是一种创建对象(Object)的模板,它允许我们定义对象的属性和方法。类是 Python 中实现面向对象编程(OOP)的核心结构。 定义一个类 定义一个类的基本语法如下…...
PHP语言的并发编程
PHP语言的并发编程 引言 随着互联网技术的迅速发展,Web 应用的复杂性和用户并发请求的增加,要求开发者在构建高性能应用时考虑并发编程。并发编程允许程序在同一时间执行多个任务,这对于处理高流量网站、API 和实时应用程序至关重要。虽然 …...
小米智能哑铃上市,代理 IP 视角下的智能健身新篇
在智能科技与健康生活深度融合的时代,小米以其敏锐的市场洞察力和强大的创新能力,不断拓展智能生态版图。米家智能哑铃的发布,无疑是其在智能健身领域的又一重要举措。而当我们从代理 IP 的独特视角来审视这一产品,会发现其中蕴含…...
业务日志设计
当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集 设计一个统计系统的日志记录机制时,主要需要…...
对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”
2024年,在高阶智驾进入快速上车的同时,座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示,2024年1-10月,中国市场(不含进出口)乘用…...
【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: QLoRA: Efficient Finetun…...
计算机网络之---物理层的基本概念
物理层简介 物理层(Physical Layer) 是 OSI(开放系统互联)模型 中的第 1 层,它主要负责数据在物理媒介上的传输,确保原始比特(0 和 1)的传输不受干扰地从一个设备传送到另一个设备。…...
Burpsuite20241102macM1版安装
1、安装jdk11 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew update brew install openjdk11 echo export PATH"/opt/homebrew/opt/openjdk11/bin:$PATH" >> ~/.zshrc source ~/.zshrc j…...
缓存常见问题
缓存问题: 1. 缓存穿透:访问一个不存在的缓存 2. 缓存击穿:大批用户访问热点数据的时候,热点数据缓存失效,大量访问数据库 3. 缓存雪崩:大批量缓存全部失效 Redis和Memcached区别: 1. Redi…...
C++ 入门第25天:线程池(Thread Pool)基础
往期回顾: C 学习第22天:智能指针与异常处理-CSDN博客 C 入门第23天:Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天:C11 多线程基础-CSDN博客 C 入门第25天:线程池(Thread Pool)基础 前…...
微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域
这是一个非常关键且容易混淆的概念 既然 this.globalData.appId appId 是将 appId 存储在内存中,为什么微信小程序中的 wx.getStorage 和 wx.setStorage(本地存储)中没有 appId,并且您提出了一个非常重要的疑问:stor…...
WLAN基本原理与配置
一、WLAN概述 二、WLAN的基本概念 AC与Fit AP的组网架构: 1.二层组网 AC和Fit AP在一个广播域中 2.三层组网 AC和Fit AP需要跨三层通信 CAPWAP(无线接入点控制和配置协议): 该协议定义了如何对AP进行管理、业务配置&#…...
KaliLinux 2022.1安装和相关配置
一、安装系统和设置中文 (一)下载安装KaliLInux2022.1 以直接下载虚拟机映像文件为例,下载地址:https://www.kali.org/get-kali/#kali-virtual-machines,下载完成后直接解压,再用VMware打开后开机&#x…...
HarmonyOS开发:ArkTS初识
ArkTS基本语法 ArkTS语言简介 ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript(简称TS)相似,在TS的生态基础上进一步扩展,继承了TS的所有特性,是TS的超集。 基本语法概述 扩展能力 基础语法:…...
Unity的四种数据持久化方式
目录 什么是数据持久化 数据持久化之PlayerPrefs 概述 API及用法 电脑中存放的位置 优缺点 主要用处 封装PlayerPrefs 数据持久化之XML XML是什么 读取XML信息 C#读取XML的方法有几种 读取xml文件信息 读取元素和属性信息 总结 写入XML信息 选择存储目录 存储…...
机器学习笔记 - 单幅图像深度估计的最新技术
1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…...
Postman接口测试02|接口用例设计
目录 六、接口用例设计 1、接口测试的测试点(测试维度) 1️⃣功能测试 2️⃣性能测试 3️⃣安全测试 2、设计方法与思路 3、单接口测试用例 4、业务场景测试用例 1️⃣分析测试点 2️⃣添加员工 3️⃣查询员工、修改员工 4️⃣删除员工、查询…...
C#语言的学习路线
C#语言的学习路线 C#(读作“C Sharp”)是一种由微软开发的现代编程语言,具有强大的功能和灵活性,广泛应用于桌面应用程序、Web开发、游戏开发以及企业级应用等多个领域。无论你是编程新手还是有一定基础的开发者,掌握…...
双目的一些文章学习
文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识,空洞卷积,SPPNet网络,计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息,又引入3D卷积来增加模…...
开源模型应用落地-qwen2-7b-instruct-LoRA微调合并-ms-swift-单机单卡-V100(十三)
一、前言 本篇文章将使用ms-swift去合并微调后的模型权重,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略,…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
