面向对象OOP

OOP:Object Oriented Programming,面向对象编程,面向对象中的对象(Obiect),通常是指客观世界中存在的对象,这个对象具有唯一性,对象之间各不相同,各有各的特点,每个对象都有自己的运动规律和内部状态;对象与对象之间又是可以相互联系、相互作用的。另外,对象也可以是一个抽象的事物。例如,可以从圆形、正方形、三角形等图形抽象出一个简单图形,简单图形就是一个对象,它有自己的属性和行为,图形中边的个数是它的属性,图形的面积也是它的属性,输出图形的面积就是它的行为。概括地讲,面向对象技术是一种从组织结构上模拟客观世界的方法。

对象Object由属性和行为组成,在 Python 中,一切都是对象。即不仅是具体的事物称为对象,字符串、函数等也都是对象

类class

类是封装对象的属性和行为的载体,反过来说,具有相同属性和行为的一类实体被称为类.将类实例化Instance之后就是对象

面向对象程序设计的特征

面向对象程序设计具有三大基本特征:封装、继承和多态

封装

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。

继承

继承是实现重复利用的重要手段,子类通过继承复用了父类的属性和行为的同时,又添加了子类特有的属性和行为。python没有接口interface的概念,继承是支持多个父类继承的.而C#是单继承的,C#通过实现接口来伪装多继承

多态

将父类对象应用于子类的特征就是多态.比如阿猫(Cat)阿狗(Dog)都是动物(Animal),都是Run()这个行为,但阿猫(Cat)和阿狗(Dog)运动行为是不一样的

定义类class

class ClassName:

    '''类的帮助信息'''   #类的描述

    statement             #类体

ClassName:用于指定类名,一般使用大写字母开头,如果类名中包括两个单词,第二个单词的首字母也大写,这种命名方法也称为“Pascal命名法”,这是惯例。当然,也可根据自己的习惯命名,但是一般推荐按照惯例来命名。

""类的帮助信息":用于指定类的文档字符串,定义该字符串后,在创建类的对象时,输入类名和左侧的括号“(”后,将显示该信息。

statement: 类体,主要由类变量(或类成员)、方法和属性等定义语句组成。如果在定义类时没想好类的具体功能,也可以在类体中直接使用 pass 语句代替。

创建类的实例

class 语句本身并不创建该类的任何实例。所以在类定义完成以后,可以创建类的实例,即实例化该类的对象。创建类的实例的语法如下:

ClassName(parameterList)

实例化类时,将自动调用__init__()方法,该方法可以认为是C#中的构造方法(函数)

__init__()方法

在创建类后,通常会创建一个 __init__()方法。该方法是一个特殊的方法,类似 Java 语言中的构造方法。每当创建一个类的新实例时,Python 都会自动执行它。 __init__()方法必须包含一个 self参数,并且必须是第一个参数。self参数是一个指向实例本身的引用,用于访问类中的属性和方法。在方法调用时会自动传递实际参数 self。因此,当 __init__()方法只有一个参数时,在创建类的实例时,就不需要指定实际参数了。self参数类似于C#的this,代表这个类本身的对象

创建类的成员来访问

创建实例方法并访问

所谓实例方法,是指在类中定义的函数。该函数是一种在类的实例上操作的函数。同__init__()方法一样,实例方法的第一个参数必须是 self,并且必须包含一个 self参数。

实例方法创建完成后,可以通过类的实例名称和点(.)操作符进行访问。

def functionName(self,parameterList):

     block

functionName:用于指定方法名,一般使用小写字母开头;

self:必要参数,表示类的实例,其名称可以是 self 以外的单词,使用 self 只是一个习惯而己:

parammeterlist:用于指定除 self参数以外的参数,各参数间使用逗号“,”进行分隔;

block:方法体,实现的具体功能。

创建属性成员来访问

数据成员是指在类中定义的变量,即属性,根据定义位置,又可以分为类属性和实例属性。

类属性

类属性是指定义在类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是
在所有实例化的对象中公用。类属性可以通过类名称或者实例名访问。

实例属性

实例属性是指定义在类的方法中的属性,只作用于当前实例中。

实例属性只能通过实例名访问。如果通过类名访问实例属性,将抛出异常

访问限制

在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了类内部的复杂逻辑。但是,Python 并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部访问,可以在属性或方法名前面添加单下划线(_f)、双下划线( __foo)或首尾加双下划线( __f__ ),从而限制访问权限。其中,单下划线、双下划线、首尾双下划线的作用如下:

_f:以单下划线开头的表示 protected(保护)类型的成员,只允许类本身和子类进行访问,但不能使用“from module import*”语句导入。

__f:双下划线表示 private(私有)类型的成员,只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可以通过“类的实例名.类名 xxx”方式访问。

__f__:首尾双下划线表示定义特殊方法,一般是系统定义名字,如__init__()

@property属性

创建用于计算的属性@property

在 Python 中,可以通过@property(装饰器)将一个方法转换为属性,从而实现用于计算的属性。将方法转换为属性后,可以直接通过方法名来访问方法,而不需要再添加一对小括号“()”,这样可以让代码更加简洁。

为属性添加安全保护机制

在 Python 中,默认情况下,创建的类属性或者实例是可以在类体外进行修改的,如果想要限制其不能在类体外修改,可以将其设置为私有的,但设置为私有后,在类体外也不能获取它的值。如果想要创建一个可以读取,但不能修改的属性,那么可以使用@property 实现只读属性。

通过属性不仅可以将属性设置为只读属性,而且可以为属性设置拦截器,即允许对属性进行修改,
但修改时需要遵守一定的约束。

示例程序:

class Snake:def __init__(self):print("实例化类时,自动调用构造函数__init__()")
snake = Snake()
class Mammal:'''哺乳动物'''heart='心形' #成员变量,需要类名.成员变量sequence=0def __init__(self,tooth,eye):Mammal.sequence=Mammal.sequence+1print("我是第",Mammal.sequence,"只哺乳动物,牙齿是:",tooth,",眼睛是:",eye,"心脏:",Mammal.heart)def run(self,state):'''哺乳动物奔跑方式,自定义函数:param state: 奔跑方式'''print("动物正在奔跑,奔跑方式为:",state)
dog=Mammal("犬齿","卵形")
dog.run("跨步")
for i in range(4):Mammal("臼齿","小眼")
class Rectangle:def __init__(self,width,height):self.width=widthself.height=height@property #将方法转换为属性def area(self):return self.width*self.height
rect=Rectangle(30,40)
print("矩形的宽度:",rect.width,",矩形的高度:",rect.height,",面积:", rect.area)

运行如图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91066.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91066.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91066.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Shopify 中创建退货标签

退货是电商运营中不可避免的一环,而一个顺畅、透明的退货流程,不仅能减少客户投诉,也有助于提升顾客对品牌的信任与忠诚度。Shopify 虽然没有内建退货标签自动生成功能,但通过合理设置与外部工具整合,你完全可以打造一…

I2C设备寄存器读取调试方法

1、查看I2C挂载设备 2、读取i2C设备所有寄存器 3、读取i2c设备的某个寄存器 4、向i2C设备某个寄存器写入一个值1、查看

K8S的Helm包管理器

一、背景 官网: https://helm.sh/ 我们针对K8S环境中,部署对应的应用,无外乎就是编写一堆yaml资源清单文件. 资源清单、依赖性少的时候,可以直接手动维护。但是,随着资源清单越来越复杂,越来越多,不同的环…

多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望

多模态数据处理新趋势:阿里云ODPS技术栈深度解析与未来展望 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈…

AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析仪

AI数据分析仪设计原理图:RapidIO信号接入 平板AI数据分析仪 1 、概述 本仪器是一款面向工业控制、新能源、震动测量等业务开发的平板AI数据分析仪。基于 Jetson Orin Nano(AI边缘计算)、实现RapidIO接口数据接入,进行AI分析。Rap…

人工智能正逐步商品化,而“理解力”才是开发者的真正超能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

Windows 环境安装 Claude Code 一、安装 WSL 环境 1. 确认 Windows 功能已开启 打开 “控制面板 → 程序 → 启用或关闭 Windows 功能” 勾选 “适用于 Linux 的 Windows 子系统” 和 “虚拟机平台” 点“确定”后重启电脑。 开机后,管理员模式打开 Terminal…

PyTorch多层感知机(MLP)模型构建与MNIST分类训练

冲冲冲😊 here😊 文章目录PyTorch多层感知机模型构建与MNIST分类训练笔记🎯 1. 任务概述⚙️ 2. 环境设置2.1 导入必要库2.2 GPU配置🧠 3. 模型构建3.1 模型定义关键点3.2 损失函数选择3.3 模型初始化与设备选择🔧 4. …

android tabLayout 切换fragment fragment生命周期

1、TabLayout 与 Fragment 结合使用的常见方式 通常会使用 FragmentPagerAdapter 或 FragmentStatePagerAdapter 与 ViewPager 配合,再将 TabLayout 与 ViewPager 关联,实现通过 TabLayout 切换 Fragment。 以下是布局文件示例 activity_main.xml: <LinearLayout xmln…

马蹄集 BD202401补给

可怕的战争发生了&#xff0c;小度作为后勤保障工作人员&#xff0c;也要为了保卫国家而努力。现在有 N(1≤N≤)个堡垒需要补给&#xff0c;然而总的预算 B(1≤B≤)是有限的。现在已知第 i 个堡垒需要价值 P(i) 的补给&#xff0c;并且需要 S(i) 的运费。 鉴于小度与供应商之间…

《Llava:Visual Instruction Tuning》论文精读笔记

论文链接&#xff1a;arxiv.org/pdf/2304.08485 参考视频&#xff1a;LLAVA讲解_哔哩哔哩_bilibili [论文速览]LLaVA: Visual Instruction Tuning[2304.08485]_哔哩哔哩_bilibili 标题&#xff1a;Visual Instruction Tuning 视觉指令微调 背景引言 大模型的Instruction…

【DataWhale】快乐学习大模型 | 202507,Task01笔记

引言 我从2016年开始接触matlab看别人做语音识别&#xff0c;再接触tensorflow的神经网络&#xff0c;2017年接触语音合成&#xff0c;2020年做落地的医院手写数字识别。到2020年接触pytorch做了计算机视觉图像分类&#xff0c;到2021年做了目标检测&#xff0c;2022年做了文本…

机器学习中的朴素贝叶斯(Naive Bayes)模型

1. 用实例来理解朴素贝叶斯 下面用具体的数据来演示垃圾邮件 vs 正常邮件的概率计算假设我们有一个小型邮件数据集邮件内容类别&#xff08;垃圾/正常&#xff09;“免费 赢取 大奖”垃圾“免费 参加会议”正常“中奖 点击 链接”垃圾“明天 开会”正常“赢取 免费 礼品”垃圾 …

document.documentElement详解

核心概念定义 它始终指向当前文档的根元素&#xff0c;在 HTML 文档中对应 <html> 标签。与 document.body&#xff08;对应 <body>&#xff09;和 document.head&#xff08;对应 <head>&#xff09;形成层级关系。与 document.body 的区别 <html> &l…

c#进阶之数据结构(动态数组篇)----Queue

1、简介这个是c#封装的队列类型&#xff0c;同栈相反&#xff0c;这个是先进先出&#xff0c;一般用于事件注册&#xff0c;或者数据的按顺序处理&#xff0c;理解为需要排队处理的可以用队列来处理。注意&#xff0c;队列一定是有顺序的&#xff0c;先进确实是会先出&#xff…

使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理)

使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理) 一、概述 本文档用于指导如何在运行 Java 应用程序的服务器上,通过keytool工具将证书导入 Java 信任库,解决因证书未被信任导致的 SSL/TLS 通信问题(如PKIX path building failed错误)。 二、操作步骤…

VUE export import

目录 命名导出 导出变量 导出函数 总结 默认导出 导出变量 导出函数 总结 因为总是搞不懂export和Import什么时候需要加{}&#xff0c;什么时候不用&#xff0c;所以自己测试了一下&#xff0c;以下是总结。 需不需要加{}取决于命名导出还是默认导出&#xff0c;命名导…

端侧宠物识别+拍摄控制智能化:解决设备识别频次识别率双低问题

随着宠物成为家庭重要成员&#xff0c;宠物影像创作需求激增&#xff0c;传统相机系统 “人脸优先” 的调度逻辑已难以应对宠物拍摄的复杂场景。毛发边缘模糊、动态姿态多变、光照反差剧烈等问题&#xff0c;推动着智能拍摄技术向 “宠物优先” 范式转型。本文基于端侧 AI 部署…

Popover API 实战指南:前端弹层体验的原生重构

&#x1fa84; Popover API 实战指南&#xff1a;前端弹层体验的原生重构 还在用 position: absolute JS 定位做 tooltip&#xff1f;还在引入大型 UI 库只为做个浮层&#xff1f;现在浏览器已经支持了真正原生的「弹出层 API」&#xff0c;一行 HTMLCSS 就能构建可交互、无障…

CCS-MSPM0G3507-6-模块篇-OLED的移植

前言基础篇结束&#xff0c;接下来我们来开始进行模块驱动如果懂把江科大的OLED移植成HAL库&#xff0c;那其实也没什么难首先配置OLED的引脚这里我配置PA16和17为推挽输出&#xff0c;PA0和1不要用&#xff0c;因为只有那两个引脚能使用MPU6050 根据配置出来的引脚&#xff0c…