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

【Python学习】面向对象(OOP)

    让我们从Python面向对象编程(OOP)的基础概念开始,逐步深入到继承、多态、特殊方法和运算符重载。

一、类和对象

什么是类和对象?

- 类(Class):类是创建对象的蓝图或模板。它定义了一组属性和方法,这些属性和方法描述了对象的行为和状态。
- 对象(Object):对象是类的实例。每个对象都有属于自己的数据和方法。

1、定义类

在Python中,使用 `class` 关键字定义一个类。

class Dog:# 类属性species = "Canis familiaris"# 初始化方法(构造函数)def __init__(self, name, age):self.name = name  # 实例属性self.age = age    # 实例属性# 实例方法def description(self):return f"{self.name} is {self.age} years old"# 实例方法def speak(self, sound):return f"{self.name} says {sound}"

2、创建对象

创建对象的过程称为实例化。

# 创建一个Dog类的实例
my_dog = Dog("Buddy", 3)# 访问实例属性
print(my_dog.name)  # 输出: Buddy
print(my_dog.age)   # 输出: 3# 调用实例方法
print(my_dog.description())  # 输出: Buddy is 3 years old
print(my_dog.speak("Woof Woof"))  # 输出: Buddy says Woof Woof

二、继承和多态

继承

继承允许我们定义一个类,该类可以继承另一个类的属性和方法。被继承的类称为父类或基类,新类称为子类或派生类。

# 定义一个基类
class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclass must implement abstract method")# 定义一个派生类
class Dog(Animal):def speak(self):return f"{self.name} says Woof 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())# 输出:
# Buddy says Woof Woof
# Whiskers says Meow

三、 特殊方法和运算符重载

特殊方法

特殊方法(也称为魔术方法)是Python中以双下划线开头和结尾的方法。这些方法在特定情况下会被自动调用。

常见的特殊方法包括:

`__init__(self, ...)`:构造函数,在对象初始化时调用。

`__str__(self)`:在使用 `print()` 函数或 `str()` 函数时调用,返回一个字符串。
`__repr__(self)`:在使用 `repr()` 函数或调试时调用,返回一个字符串。

class Dog:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"{self.name} is {self.age} years old"def __repr__(self):return f"Dog(name={self.name}, age={self.age})"

运算符重载

运算符重载允许我们定义对象如何响应内置运算符。例如,我们可以定义两个对象相加时的行为。

class Vector:def __init__(self, x, y):self.x = xself.y = ydef __add__(self, other):return Vector(self.x + other.x, self.y + other.y)def __str__(self):return f"Vector({self.x}, {self.y})"v1 = Vector(2, 3)
v2 = Vector(5, 7)
v3 = v1 + v2
print(v3)  # 输出: Vector(7, 10)

总结

    通过学习类和对象、继承和多态、以及特殊方法和运算符重载,咱可以掌握Python面向对象编程的核心概念。这些知识将帮助咱编写更模块化、可重用和可维护的代码。

相关文章:

【Python学习】面向对象(OOP)

让我们从Python面向对象编程(OOP)的基础概念开始,逐步深入到继承、多态、特殊方法和运算符重载。 一、类和对象 什么是类和对象? - 类(Class):类是创建对象的蓝图或模板。它定义了一组属性和方法…...

鸿蒙HarmonyOS实战—如何使用Video组件播放视频

1.视频播放 鸿蒙系统中,关于视频播放,可以使用上层视频组件Video。 参数如下 src 支持file:///data/storage路径前缀的字符串,用于读取应用沙箱路径内的资源。需要保证目录包路径下的文件有可读权限。 说明:视频支持的格式是&am…...

【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能

1 简介 最近在浏览 Paddle2ONNX 的 Issues 时,我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本,于是我动手添加了这个功能。 能否指定 IR representation的版本 Issue #1248 PaddlePaddle/Paddle2ONNX 2 什么…...

JS 中的DOM 操作

目录 概念Node接口NodeList接口,HTMLCollection接口ParentNode接口,ChildNode接口Document节点Element节点属性的操作Text节点和DocumentFragment节点CSS操作Mutation Observer API概念 D...

短剧出海怎么做?

短剧出海,即是指将制作的短剧内容推广到国际市场,吸引海外观众。以下是一些策略和步骤,可以帮助你实现这一目标: 研究目标市场:了解你想要进入的海外市场的文化、偏好和消费习惯。这包括语言、流行文化、媒体消费习惯等…...

【C++修行之道】类和对象(四)运算符重载

目录 一、 运算符重载 函数重载和运算符重载有什么关系? 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝? 2. 赋值运算符只能重载成类的…...

伯克希尔也被ST?

地球(最)贵股票突然闪崩,美股故障再次上演。昨晚齐刷刷一片的美股出现行情异常,伯克希尔、蒙特利尔银行、巴里克黄金等股票股价跌幅超过98%。其中,巴菲特旗下伯克希尔哈撒韦A类股股价更是暴跌99.97%,股价从…...

低代码和零代码软件时代质量管理(QM)和质量管理系统(QMS)

【前言】 质量控制过程的目的是为了确保产品的制造标准得到保持和改进。质量控制过程使公司能够满足客户的期望,同时确保产品质量的一致水平。采用这些标准创造了一种公司文化,鼓励所有员工努力实现高质量的生产标准。低代码和零代码软件可以成为质量控…...

JS跨页面或跨JS文件对变量赋值

JS跨页面或跨JS文件对变量赋值,这是很小的一个问题。 但问题虽小,却总觉得有点不够自然,不爽。 为什么呢?访问一个页面上的变量不是什么难事,比如用parent.变量名,或者windows名.变量名,都可以…...

xxe漏洞——无回显(ctfshow web374——378)

ctfshow——web374 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2021-01-07 12:59:52 # Last Modified by: h1xa # Last Modified time: 2021-01-07 13:36:47 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); libxml_disable_en…...

深入解读 Android Hook 技术-从原理到实践

在Android开发中&#xff0c;Hook技术是一种强大的手段&#xff0c;它允许开发者拦截和修改系统或应用的行为。通过Hook&#xff0c;我们可以在事件传递的过程中插入自定义的逻辑&#xff0c;从而实现对应用行为的监控和修改。 Android 系统有自己的事件分发机制&#xff0c;…...

架构每日一学 15:想要提升协作效率,必须先统一语义

谭sir与二仙桥大爷的经典对话&#xff1a; 谭sir&#xff1a;你该走哪&#xff1f;&#xff08;非机动车能走机动车道吗&#xff1f;&#xff09; 大爷&#xff1a;走二仙桥去成华大道&#xff08;因为我要去成华大道&#xff0c;当然要走二仙桥&#xff09; 谭sir&#xff1a;…...

基于树莓派4B设计的智能家居系统(华为云IOT)

基于树莓派的智能家居控制系统(华为云IOT) 文章目录 一、设计需求前言【1】 项目背景【2】需求总结【3】研究的内容【4】 国内外研究状况【5】本课题要解决的问题【6】开发工具的选择 二、硬件选型【1】 树莓派开发板【2】TFT卡-烧写系统使用【3】0.5米网线-远程登录【4】MQ2烟…...

路由懒加载

在 Vue.js 中&#xff0c;路由懒加载&#xff08;也称为代码分割&#xff09;是一种优化策略&#xff0c;它允许你将 Vue 组件分割成不同的代码块&#xff0c;并在需要时按需加载它们。这有助于减少初始加载时间&#xff0c;提高用户体验。 Vue Router 支持 Webpack 的动态 im…...

在Spring中实现资源的动态加载和卸载

在Spring框架中&#xff0c;实现资源的动态加载和卸载通常涉及以下几个方面&#xff1a; 1. 使用Bean注解动态注册Bean 通过在配置类中使用Bean注解&#xff0c;可以在运行时动态创建和注册Bean。 Configuration public class DynamicBeanConfig {Beanpublic MyBean myBean(…...

Windows下 CLion中,配置 OpenCV、LibTorch

首先按照win下C部署深度学习模型之clion配置pytorchopencv教程记录 步骤配置。 LibTorch 部分 在测试LibTorch时会出现类似 c10.dll not found 的问题&#xff08;Debug才有&#xff09;&#xff1a; 参考C部署Pytorch&#xff08;Libtorch&#xff09;出现问题、错误汇总和 …...

机器学习知识点总结

简介&#xff1a;随着人工智能&#xff08;AI&#xff09;蓬勃发展&#xff0c;也有越来越多的人涌入到这一行业。下面简单介绍一下机器学习的各大领域&#xff0c;机器学习包含深度学习以及强化学习&#xff0c;在本节的机器学习中主要阐述一下机器学习的线性回归逻辑回归&…...

OBproxy基础运维

简介 obproxy 属于OceanBase的代理&#xff0c;生产环境中 OceanBase 数据库的数据 会以 多副本的形式 存放在各个 OBServer 节点上&#xff0c;obproxy 接收用户发出的 SQL 请求&#xff0c;并将 SQL 请求转发至最佳目标 OBServer 节点&#xff0c;最后将执行结果返回给用户&…...

【Python】 探索Pytz库中的时区列表

基本原理 在Python中&#xff0c;处理时区是一个常见但复杂的问题。pytz是一个Python库&#xff0c;它提供了对时区的精确和丰富的支持。pytz库是datetime模块的补充&#xff0c;它允许更准确地处理时区信息。pytz库包括了IANA时区数据库&#xff0c;这个数据库包含了全球的时…...

C#操作MySQL从入门到精通(9)——Mysql中的数据类型以及对应的C#中的数据类型

1、本文介绍...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...