当前位置: 首页 > news >正文

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 装饰器定义静态方法,静态方法不需要 selfcls 参数。

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] = valuedef __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"]

使用这些特殊方法,你可以自定义类的字符串表示、布尔值、长度等行为。

selfcls

在Python中,selfcls是用于类方法中的特殊参数,它们分别用于实例方法和类方法中。

特性selfcls
用途指向类的实例本身指向类本身
方法类型实例方法类方法
访问范围实例属性和实例方法类属性和类方法
定义方式不需要装饰器使用@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 中&#xff0c;类&#xff08;Class&#xff09;是一种创建对象&#xff08;Object&#xff09;的模板&#xff0c;它允许我们定义对象的属性和方法。类是 Python 中实现面向对象编程&#xff08;OOP&#xff09;的核心结构。 定义一个类 定义一个类的基本语法如下…...

PHP语言的并发编程

PHP语言的并发编程 引言 随着互联网技术的迅速发展&#xff0c;Web 应用的复杂性和用户并发请求的增加&#xff0c;要求开发者在构建高性能应用时考虑并发编程。并发编程允许程序在同一时间执行多个任务&#xff0c;这对于处理高流量网站、API 和实时应用程序至关重要。虽然 …...

小米智能哑铃上市,代理 IP 视角下的智能健身新篇

在智能科技与健康生活深度融合的时代&#xff0c;小米以其敏锐的市场洞察力和强大的创新能力&#xff0c;不断拓展智能生态版图。米家智能哑铃的发布&#xff0c;无疑是其在智能健身领域的又一重要举措。而当我们从代理 IP 的独特视角来审视这一产品&#xff0c;会发现其中蕴含…...

业务日志设计

当一个项目足够大的时候&#xff0c;我们需要将统计系统完全独立出去&#xff0c;那么就无法避免数据采集的问题&#xff0c;我们可以在业务触发处增加log日志来记录当前变化的原始数据&#xff0c;提供统计系统进行采集 设计一个统计系统的日志记录机制时&#xff0c;主要需要…...

对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”

2024年&#xff0c;在高阶智驾进入快速上车的同时&#xff0c;座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示&#xff0c;2024年1-10月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用…...

【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: QLoRA: Efficient Finetun…...

计算机网络之---物理层的基本概念

物理层简介 物理层&#xff08;Physical Layer&#xff09; 是 OSI&#xff08;开放系统互联&#xff09;模型 中的第 1 层&#xff0c;它主要负责数据在物理媒介上的传输&#xff0c;确保原始比特&#xff08;0 和 1&#xff09;的传输不受干扰地从一个设备传送到另一个设备。…...

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…...

缓存常见问题

缓存问题&#xff1a; 1. 缓存穿透&#xff1a;访问一个不存在的缓存 2. 缓存击穿&#xff1a;大批用户访问热点数据的时候&#xff0c;热点数据缓存失效&#xff0c;大量访问数据库 3. 缓存雪崩&#xff1a;大批量缓存全部失效 Redis和Memcached区别&#xff1a; 1. Redi…...

C++ 入门第25天:线程池(Thread Pool)基础

往期回顾&#xff1a; C 学习第22天&#xff1a;智能指针与异常处理-CSDN博客 C 入门第23天&#xff1a;Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天&#xff1a;C11 多线程基础-CSDN博客 C 入门第25天&#xff1a;线程池&#xff08;Thread Pool&#xff09;基础 前…...

微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域

这是一个非常关键且容易混淆的概念 既然 this.globalData.appId appId 是将 appId 存储在内存中&#xff0c;为什么微信小程序中的 wx.getStorage 和 wx.setStorage&#xff08;本地存储&#xff09;中没有 appId&#xff0c;并且您提出了一个非常重要的疑问&#xff1a;stor…...

WLAN基本原理与配置

一、WLAN概述 二、WLAN的基本概念 AC与Fit AP的组网架构&#xff1a; 1.二层组网 AC和Fit AP在一个广播域中 2.三层组网 AC和Fit AP需要跨三层通信 CAPWAP&#xff08;无线接入点控制和配置协议&#xff09;&#xff1a; 该协议定义了如何对AP进行管理、业务配置&#…...

KaliLinux 2022.1安装和相关配置

一、安装系统和设置中文 &#xff08;一&#xff09;下载安装KaliLInux2022.1 以直接下载虚拟机映像文件为例&#xff0c;下载地址&#xff1a;https://www.kali.org/get-kali/#kali-virtual-machines&#xff0c;下载完成后直接解压&#xff0c;再用VMware打开后开机&#x…...

HarmonyOS开发:ArkTS初识

ArkTS基本语法 ArkTS语言简介 ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript&#xff08;简称TS&#xff09;相似&#xff0c;在TS的生态基础上进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 基本语法概述 扩展能力 基础语法&#xff1a…...

Unity的四种数据持久化方式

目录 什么是数据持久化 数据持久化之PlayerPrefs 概述 API及用法 电脑中存放的位置 优缺点 主要用处 封装PlayerPrefs 数据持久化之XML XML是什么 读取XML信息 C#读取XML的方法有几种 读取xml文件信息 读取元素和属性信息 总结 写入XML信息 选择存储目录 存储…...

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…...

Postman接口测试02|接口用例设计

目录 六、接口用例设计 1、接口测试的测试点&#xff08;测试维度&#xff09; 1️⃣功能测试 2️⃣性能测试 3️⃣安全测试 2、设计方法与思路 3、单接口测试用例 4、业务场景测试用例 1️⃣分析测试点 2️⃣添加员工 3️⃣查询员工、修改员工 4️⃣删除员工、查询…...

C#语言的学习路线

C#语言的学习路线 C#&#xff08;读作“C Sharp”&#xff09;是一种由微软开发的现代编程语言&#xff0c;具有强大的功能和灵活性&#xff0c;广泛应用于桌面应用程序、Web开发、游戏开发以及企业级应用等多个领域。无论你是编程新手还是有一定基础的开发者&#xff0c;掌握…...

双目的一些文章学习

文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识&#xff0c;空洞卷积&#xff0c;SPPNet网络&#xff0c;计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息&#xff0c;又引入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的梯…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...