【Python 面向对象】
Python 的面向对象编程(OOP)通过类(Class)和对象(Object)实现代码结构化,支持封装、继承和多态三大特性。以下是系统化指南:
一、类与对象基础
1. 定义类
class Dog:# 类属性(所有实例共享)species = "Canis familiaris"# 构造方法(__init__是魔法方法)def __init__(self, name, age):self.name = name # 实例属性self.age = age# 实例方法def bark(self):return f"{self.name} says: Woof!"# 创建对象
my_dog = Dog("Buddy", 3)
print(my_dog.species) # 输出: Canis familiaris
2. 特殊方法(Magic Methods)
class Rectangle:def __init__(self, width, height):self.width = widthself.height = height# 计算面积def area(self):return self.width * self.height# 字符串表示(__str__用于用户友好显示)def __str__(self):return f"Rectangle({self.width}x{self.height})"# 运算符重载(实现加法)def __add__(self, other):return Rectangle(self.width + other.width,self.height + other.height)rect1 = Rectangle(2, 3)
rect2 = Rectangle(4, 5)
print(rect1 + rect2) # 输出: Rectangle(6x8)
二、继承与方法重写
1. 单继承
class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("子类必须实现此方法")class Dog(Animal):def speak(self):return f"{self.name} says: Woof!"class Cat(Animal):def speak(self):return f"{self.name} says: Meow!"animals = [Dog("Buddy"), Cat("Whiskers")]
for animal in animals:print(animal.speak())
2. 多重继承
class Flyer:def fly(self):return "Flying!"class Swimmer:def swim(self):return "Swimming!"class Duck(Flyer, Swimmer):def __init__(self, name):self.name = nameduck = Duck("Donald")
print(duck.fly()) # 输出: Flying!
print(duck.swim()) # 输出: Swimming!
3. super() 函数
class Rectangle:def __init__(self, width, height):self.width = widthself.height = heightclass ColoredRectangle(Rectangle):def __init__(self, width, height, color):super().__init__(width, height) # 调用父类构造方法self.color = color
三、多态与鸭子类型
1. 运行时多态
class Shape:def area(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2class Square(Shape):def __init__(self, side):self.side = sidedef area(self):return self.side ** 2def print_area(shape):print(shape.area())print_area(Circle(5)) # 输出: 78.5
print_area(Square(4)) # 输出: 16
2. 鸭子类型(Duck Typing)
class Duck:def quack(self):print("Quack!")class FakeDuck:def quack(self):print("Silent quack")def make_quack(duck):duck.quack()make_quack(Duck()) # 输出: Quack!
make_quack(FakeDuck()) # 输出: Silent quack
四、封装与访问控制
1. 属性控制
class BankAccount:def __init__(self, balance=0):self.__balance = balance # 双下划线前缀实现名称修饰@propertydef balance(self):return self.__balance@balance.setterdef balance(self, value):if value < 0:raise ValueError("余额不能为负")self.__balance = valueaccount = BankAccount(100)
account.balance = 200 # 允许修改
# account.balance = -50 # 抛出 ValueError
2. 描述符协议
class NonNegative:def __set_name__(self, owner, name):self.name = namedef __get__(self, instance, owner):return instance.__dict__[self.name]def __set__(self, instance, value):if value < 0:raise ValueError("值不能为负")instance.__dict__[self.name] = valueclass Product:price = NonNegative()stock = NonNegative()def __init__(self, price, stock):self.price = priceself.stock = stockproduct = Product(19.99, 100)
# product.price = -5 # 抛出 ValueError
五、高级特性
1. 元类(Metaclass)
class Singleton(type):_instances = {}def __call__(cls, *args, **kwargs):if cls not in cls._instances:cls._instances[cls] = super().__call__(*args, **kwargs)return cls._instances[cls]class Database(metaclass=Singleton):passdb1 = Database()
db2 = Database()
print(db1 is db2) # 输出: True
2. 抽象基类(ABC)
from abc import ABC, abstractmethodclass PaymentGateway(ABC):@abstractmethoddef process_payment(self, amount):passclass PayPal(PaymentGateway):def process_payment(self, amount):print(f"PayPal 处理支付: ${amount}")# class FakeGateway(PaymentGateway): pass # 实例化会报错
六、设计模式应用
1. 工厂模式
class ShapeFactory:@staticmethoddef create_shape(shape_type, **kwargs):shapes = {'circle': Circle,'square': Square}return shapes[shape_type](**kwargs)circle = ShapeFactory.create_shape('circle', radius=5)
2. 单例模式
class Database:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls)cls._instance._initialized = Falsereturn cls._instancedef __init__(self):if not self._initialized:self.connect()self._initialized = Truedef connect(self):print("建立数据库连接")
七、最佳实践
- 组合优于继承:优先使用对象组合而非类继承
- 显式优于隐式:避免过度依赖魔术方法
- 保持简单:单个类职责不超过7个方法(参考SRP原则)
- 文档字符串:为每个类和方法编写docstring
- 类型注解(Python 3.5+):
class Vector:def __init__(self, x: float, y: float):self.x = xself.y = y
掌握这些面向对象技术后,可进一步探索设计模式(如MVC、观察者模式)和框架开发(如Django的类视图)。建议通过实际项目(如开发电商系统、游戏引擎)深化理解。
相关文章:
【Python 面向对象】
Python 的面向对象编程(OOP)通过类(Class)和对象(Object)实现代码结构化,支持封装、继承和多态三大特性。以下是系统化指南: 一、类与对象基础 1. 定义类 class Dog:# 类属性&…...
软考软件评测师——计算机组成与体系结构
目录 计算机寻址方式详解与对比分析 一、立即寻址 二、直接寻址 三、间接寻址 四、寄存器寻址 五、寄存器间接寻址 六、变址寻址 七、基址寻址 八、相对寻址 九、综合对比分析 计算机寻址方式详解与对比分析 一、立即寻址 核心概念 指令操作码后直接携带操作数值&a…...
宝元LNC数控数据采集方式、跨平台采集通讯方案介绍
文章目录 采集效果图通讯方案介绍技术名词解释技术细节小结 采集效果图 通讯方案介绍 老版本宝元:必须走TCP通讯,如LNC568A系列 今天主要介绍新版本的宝元,如采用M6800控制器的5800系列系统等 新版本宝元通讯方式: ①sdk通讯&…...
ZFile与Cpolar技术结合实现远程数据实时访问与集中管理的可行性分析
文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 在信息爆炸的年代,每个现代人都在数字浪潮中扮演着独特的角色。不论是商务精英、影像创作者还是学术达人&…...
JS手写代码篇---手写 Object.create
JS手写代码篇 在做手写题的时候,我们要思考两个问题 这个代码的作用是什么能够实现的效果是什么样子 1. 手写 Object.create 思路:创造一个对象,类似于Object.create()方法>将obj作为原型 // 手写 Object.create function create (ob…...
homeassistant安装
这里写自定义目录标题 homeassistant安装(windows)安装virtual boxhaos下载haos安装docker镜像地址更换安装File editor安装hacs安装Xiaomi Miot Auto问题排查 homeassistant安装(windows) 安装virtual box 百度搜索virtual box…...
Pythonnet - 实现.NET Core和Python进行混合编程
1 安装Pythonnet包 2...
C++23 新特性:ranges::contains 与 ranges::contains_subrange
文章目录 ranges::containsranges::contains_subrange编译器支持总结 C23 标准带来了许多令人兴奋的新特性,其中就包括了 ranges::contains 和 ranges::contains_subrange 这两个算法。这两个算法由提案 P2302R4 提出,它们为 C 程序员提供了更加丰富和…...
(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)
目录 前言: 源代码: product.h product.c fileio.h fileio.c main.c 代码解析: 一、程序结构概述 二、product.c 函数详解 1. 初始化商品列表 Init_products 2. 添加商品 add_product 3. 显示商品 display_products 4. 修改商品 mo…...
Framebuffer显示bmp图片
代码: /* 标准输入输出头文件,提供文件操作和输入输出函数(如printf)*/ #include <stdio.h>/* 文件控制操作头文件,提供文件打开模式(如O_RDWR)和文件控制函数 */ #include <fcntl.h&…...
常用负载均衡技术有哪些?不同网络层面上的网络负载均衡技术
前言 负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或I/O任务,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性。 在系统管理员发现网络性能不好时,可以通过网络负载均衡来分配资源,以…...
由于复制槽导致wal大量堆积的处理方案
文章目录 环境症状问题原因解决方案 环境 系统平台:N/A 版本:N/A 症状 数据库中的pg_wal占用大量空间,且不删除。 问题原因 复制槽占用早期的wal日志,导致wal归档后无法正常删除。 1. 排查复制槽情况: highgo# …...
用FileCodeBox打造私有文件传输:Ubuntu环境保姆级部署教程!
文章目录 前言1.Docker部署2.简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在数字化浪潮席卷全球的当下,文件传输已成为现代职场的高频需求。当谈及资料交换场景时,许多用户往往抱怨传统工具存在界面复杂、功能卡顿、广告…...
从卡顿到丝滑:JavaScript性能优化实战秘籍
引言 在当今的 Web 开发领域,JavaScript 作为前端开发的核心语言,其性能表现对网页的加载速度、交互响应以及用户体验有着举足轻重的影响。随着 Web 应用的复杂度不断攀升,功能日益丰富,用户对于网页性能的期望也越来越高。从电商…...
win11平台下的docker-desktop中的volume位置问题
因为需要搞个本地的mysql数据库,而且本地安装的程序较多,不想再安mysql了,就想到使用docker来安装。而且因为数据巨大,所以想到直接使用转移data文件夹的方式。 各种查询,而且还使用ai查询,他们都提到&…...
掌握Multi-Agent实践(七):基于AgentScope分布式模式实现多智能体高效协作[并行加速大模型辅助搜索、分布式多用户协同辩论赛]
之前的案例都是运行在单台机器上以单进程形式运行,受限于 Python 的全局解释器锁,实际只能有效利用一个 CPU 的计算资源,并且无法支持多个用户从自己的电脑上接入同一个 Multi-Agent 应用进行交互。为了提高运行效率并支持多用户接入同一个应用中,AgentScope 提供了分布式…...
2023CCPC河南省赛暨河南邀请赛个人补题ABEFGHK
Dashboard - 2023 CCPC Henan Provincial Collegiate Programming Contest - Codeforces 过题难度:A H F G B K E 铜奖: 2 339 银奖: 3 318 金奖: 5 523 A: 直接模拟 // Code Start Here int t;cin >> t;while(t-…...
基于基金净值百分位的交易策略
策略来源:睿思量化小程序 基金净值百分位,是衡量当前基金净值在过去一段时间内的相对位置。以近一年为例,若某基金净值百分位为30%,意味着过去一年中有30%的时间基金净值低于当前值,70%的时间高于当前值。这一指标犹如…...
Ubuntu20.04下如何源码编译Carla,使用UE4源码开跑,踩坑集合
一、简介 作为一个从事算法研究的人员,无人驾驶仿真一直是比较重要的一部分,但是现在比较常见的算法验证都是在carla这个开源仿真平台上做的,所以我有二次开发carla的需求,今天就来讲讲编译CARLA。 网上的教材很多,但还是推荐大家看官网教程:Linux build - CARLA Simul…...
Windows 环境下 Docker Desktop 安装 + 汉化
一、WSL2Ubuntu20.04以及Docker Desktop安装 在开发过程中,Docker 是一款极为实用的工具。本教程专为 Windows 用户打造,将全面且细致地讲解 Docker Desktop 的安装与配置步骤,助您迅速入门并熟练掌握。同时,考虑到语言使用习惯&…...
HDMI信号采集器连OBS没有声音的问题
Windows中的设置 windows中可以按客服发来的视频做参考。 视频教程: https://jvod.300hu.com/vod/product/79b234d5-81f0-4255-8680-693de7b4b0d4/715859bc4d83490bb977d8bc0061bd5e.mp4 Linux中的设置 在linux中发现视频不太一样,设置完没有声音。…...
Remote Desktop安卓远程无法使用中文输入法
新版remote desktop包括windows app都无法使用中文输入法 下载旧版才能用8.8.1.56.294 感谢评论区大哥提供的方案...
maven报错 You have to use a classifier to attach supplemental artifacts
完整报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.3.0:jar (default-jar) on project **: You have to use a classifier to attach supplemental artifacts to the project instead of replacing them. -> [Help 1] 解决办法 修改…...
maven dependencyManagement标签作用
dependencyManagement作用 1. 确保多模块间依赖版本一致 在父 POM 中定义依赖的版本、作用域(Scope)、排除项(Exclusions)等,子模块引用这些依赖时无需指定版本 2.灵活覆盖 子模块可以按需覆盖父 POM 中定义的版…...
Flink 运维监控与指标采集实战(Prometheus + Grafana 全流程)
一、引言:为什么 Flink 运维监控如此重要? 在实时计算场景中,Flink 作业 724 小时运行,对性能、资源、故障感知、状态变化的实时监控非常关键。没有有效的运维可观测体系: 不知道任务是否在稳定运行 发生问题难以快速定位 无法感知背压、延迟、反压等状态 因此,构建完善…...
计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法
本文所提算法如下: 叙述按时间顺序 你也可以把本文当作快速阅读这几篇文献的一个途径 所有重要的部分我都已经标注并弄懂其原理 方便自己也是方便大家 Line-CNN:基于线提议单元的端到端交通线检测 摘要 交通线检测是一项基础且具有挑战性的任务。以往的…...
Spring MVC HttpMessageConverter 的作用是什么?
HttpMessageConverter (HTTP 消息转换器) 是 Spring MVC 框架中一个非常核心的组件,它的主要作用是在 HTTP 请求、响应体与 Java 对象之间进行双向转换。 核心作用: 读取请求体 (Request Body) 到 Java 对象: 当 Controller 方法的参数使用 …...
WebGL 3着色器和GLSL
我们之前提到过着色器和GLSL,但是没有涉及细节,你可能已经对此有所了解, 但以防万一,这里将详细讲解着色器和GLSL。 在工作原理中我们提到,WebGL每次绘制需要两个着色器, 一个顶点着色器和一个片段着色器&…...
Hugging Face 中 LeRobot 使用的入门指南
相关源文件 .github/ISSUE_TEMPLATE/bug-report.yml .github/PULL_REQUEST_TEMPLATE.md README.md examples/1_load_lerobot_dataset.py examples/2_evaluate_pretrained_policy.py examples/3_train_policy.py lerobot/scripts/eval.py lerobot/scripts/train.py 本页面提供 …...
从零开始学习three.js(18):一文详解three.js中的着色器Shader
在WebGL和Three.js的3D图形渲染中,着色器(Shader) 是实现复杂视觉效果的核心工具。通过编写自定义的着色器代码,开发者可以直接操作GPU,实现从基础颜色渲染到动态光照、粒子效果等高级图形技术。本文将深入解析Three.j…...
Trae - 国人Cursor的免费平替产品
前情提要:Cursor-零基础使用flutter完成贪吃蛇游戏-迄今为止世上最牛的AI编辑工具,不需要程序员也可以编程 Cursor 不是我的最佳选择 Cursor 是基于 VSCode 进化而来,虽然好用,但总结下来有几点点是我有所顾虑的。 第一&#x…...
【PmHub后端篇】PmHub中Seata分布式事务保障任务审批状态一致性
在分布式系统中,事务管理是保证数据一致性的关键。本文将深入探讨在PmHub系统中,如何利用Seata分布式事务来保证任务审批状态的一致性。分布式事务在面试中是常见的考点,网上教程多偏理论,而实际项目中的应用更为关键。 1 事务基…...
2025年长三角高校数模竞赛B题Q1-Q3详细求解与Q4详细分析
B题 空气源热泵供暖的温度预测 问题背景 空气源热泵是一种与中央空调类似的设备,其结构主要由压缩主机、热交换 器以及末端构成,依靠水泵对末端房屋提供热量来实现制热。空气源热泵作为热 惯性负载,调节潜力巨大。工作时通过水循环系统将…...
插槽(Slot)的使用方法
插槽是Vue.js中一个强大的功能,允许你在组件中预留位置,让父组件可以插入自定义内容。以下是插槽的主要使用方法: 基本插槽 <!-- 子组件 ChildComponent.vue --> <template><div><h2>子组件标题</h2><slo…...
Milvus Docker 部署教程
1. 环境准备 确保您的系统已安装: DockerDocker ComposePython (用于运行客户端代码) 2. 项目结构 创建项目目录并设置以下文件: milvus-docker/ ├── docker-compose.yml ├── main.py3. 配置文件 docker-compose.yml version: 3.5services:…...
Vue 3 中 watch 的使用与深入理解
在 Vue 3 的 Composition API 中,watch 是一个非常强大的工具,用于监听响应式数据的变化并做出相应的处理。本文将通过一段实际代码来深入解析 watch 的行为和使用技巧。 🧩 示例代码回顾 import { reactive, watch } from vueconst state …...
嵌入式学习笔记 D21:双向链表的基本操作
双向链表的定义与创建双向链表的插入双向链表的查找双向链表的修改双向链表的删除双向链表的逆序MakeFile工具使用 一、双向链表的定义与创建 1.双向链表的定义: 双向链表是在单链表的每个结点中,再设置一个指向其前一个结点的指针域。 struct DOUNode…...
pciutils-3.5.5-win64工具的使用方法
目录 简介: 方法一:使用设备管理器 方法二:pciutils-3.5.5-win64 简介: window系统下查看PCIe设备信息比较困难 linux版本下,查看PCIE的信息比较容易,可在安装插件后直接使用命令得出。 例如…...
全息美AISEO引领AIGEO新趋势
内容概要 在数字化营销变革的浪潮中,全息美AISEO为企业注入了全新的活力。通过结合先进的技术与创造性的策略,AISEO不仅提升了品牌的可见度,更通过精准的用户定位,实现了信息的高效传播。尤其在当下竞争日益激烈的市场环境中&…...
平滑过滤值策略
该策略是一种基于技术分析的交易策略,主要通过计算一系列指标来判断市场趋势,并根据这些指标生成交易信号。 策略概述 该策略的核心在于利用多个技术指标来分析市场动态,并据此制定交易决策。它结合了价格动量、波动性和趋势跟踪等多种因素,旨在提高交易的准确性和效率。…...
Windows平台OpenManus部署及WebUI远程访问实现
前言:继DeepSeek引发行业震动后,Monica.im团队最新推出的Manus AI 产品正席卷科技圈。这款具备自主思维能力的全能型AI代理,不仅能精准解析复杂指令并直接产出成果,更颠覆了传统人机交互模式。尽管目前仍处于封闭测试阶段…...
极验证Geetest 通过python代理 透传
看了几个破解Geetest 四代滑块的视频和文章,有点望而生畏,github上也有收集极验四代滑块所有图片后经过ai训练做的破解代码,但作者说成功率只有90%。 于是考虑通过python透传的方法,j就是对自动化脚本套个【网页界面】的壳&#…...
JDK 1.8 全解析:从核心特性到企业实战的深度实践
引言 JDK 1.8 作为 Java 生态发展史上的里程碑版本,自 2014 年发布以来,凭借 Lambda 表达式、Stream API、新日期时间 API 三大核心特性,彻底重塑了 Java 编程范式。本文结合 Oracle 官方文档、蚂蚁集团、京东零售等企业级实战案例ÿ…...
OptiStruct实例:汽车声控建模
本章通过一个Tim-BaDy模型,展示利用AemmiecaviyMet工具进行声腔网格划分的过程因为南腔是考康边界的声场,所以在开展腔建机之的N营涉设物建大致封闭的边界模器东有内商院建权为例,首先需要准备自车身所合之的、首先委部)结构的有限元型车内声…...
k8s(12) — 版本控制和滚动更新(金丝雀部署理念)
金丝雀部署简介: 1、基本概念 金丝雀部署是一种软件开发中的渐进式发布策略,其核心思想是通过将新版本应用逐步发布给一小部分用户(即 “金丝雀” 用户),在真实环境中验证功能稳定性和性能表现,再逐步扩大发…...
基于matlab实现AUTOSAR软件开发---答疑6
最近有少朋友在咨询我关于模型生成A2L文件,之后在把elf文件的地址提取进去,生成最终的A2L的操作,这个其实可以看下mathwork的帮助文档,地址如下: https://www.mathworks.com/help/ecoder/ug/asap2-cdf-calibration.htmlhttps://www.mathworks.com/help/ecoder/ug/asap2-c…...
铜墙铁壁 - 服务网格的安全之道 (Istio 实例)
铜墙铁壁 - 服务网格的安全之道 (Istio 实例) 在微服务架构中,服务间的通信是频繁且复杂的。传统的安全模型常常假设内部网络是可信的,这在现代分布式系统和云原生(尤其是零信任)环境中是远远不够的。我们需要解决几个核心安全问题: 通信加密 (Encryption):如何确保服务 …...
计量——检验与代理变量
1.非嵌套模型的检验 1Davidson-Mackinnon test 判断哪个模型好 log(y)β0β1x1β2x2β3x3u log(y)β0β1log(x1)β2log(x2)β3log(x3)u 1.对logÿ…...
【C++】解析C++面向对象三要素:封装、继承与多态实现机制
解析C面向对象三要素:封装、继承与多态实现机制 1. 面向对象设计基石2. 封装:数据守卫者2.1 访问控制实现2.2 封装优势 3. 继承:代码复用艺术3.1 继承的核心作用3.2 继承类型对比3.3 典型应用场景3.4 构造函数与析构函数处理3.4.1 构造顺序控…...
c语言 写一个五子棋
c语言 IsWin判赢 display 画棋盘 判断落子的坐标是否已有棋子 判断落子坐标范围是否超出范围 // 五子棋 #include <stdio.h> #include <stdlib.h>// 画棋盘 void display(char map[][10]) {system("clear");printf(" 0 1 2 3 4 5 6 7 8 9\n&…...