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

生命在于学习——Python人工智能原理(2.5.1)

在这里插入图片描述

五、Python的类与继承

5.1 Python面向对象编程

在现实世界中存在各种不同形态的事物,这些事物之间存在各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象之间的关系描述事物之间的联系,这种思想用在编程中就是面向对象编程。

(1)面向对象编程的含义

面向对象编程,简称oop,是一种编程范例。它提供了一种结构化程序的方法,以便将属性和行为捆绑到单个对象中。

(2)类与对象定义

对象是一个抽象概念,将对象划分为两个部分,即静态部分和动态部分,静态部分被称为属性,任何对象都具备自身属性,这些不仅是客观存在的,而且是不能忽视的。
类是封装对象的属性和行为的载体,对象是类的示例。

(3)面向对象的特征

面向对象程序设计有三大基本特征:封装、继承、多态。
封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类。

(4)面向对象与面向过程编程的区别

面向过程思想在早期开发语言中大量使用,它是分析出解决问题的步骤,然后用函数将这些步骤一一实现,使用的时候另行调用,面向过程只考虑在函数中封装代码逻辑,不考虑函数的归属关系。

(5)类的定义与使用

a、定义
在Python中,类表示具有相同属性和方法的对象集合,在使用类时,需要先定义类,然后再创建类的实例,类的定义使用class关键字实现,默认有init方法。

class dog:def _init_(self,name,age):self.name = nameself.age = agedef bark(self):print("woof!")
#创建类的实例
my_dog = Dog(name="Buddy",age=3)
#访问对象的属性
print(my_dog.name)#输出:buddy
#调用对象的方法
my_dog.bark()#输出:woof!

b、使用
通过实例化类来创建对象,并通过对象访问属性和调用方法,在上面的例子中,Dog类定义了一个狗的对象,具有name和age两个属性以及bark方法,通过创建my_dog对象,我们可以访问其属性和调用其方法。

5.2 属性和方法的定义和使用

(1)创建类与对象

a、属性

属性用于描述事物的特征,如颜色、大小、数量等。可以分为类属性和对象属性。类的属性存储了类的各种数据,定义位置有类的内部和方法的外部,由该类所有的对象共同拥有。类属性可以通过类名访问,也可以通过对象名访问,但只能通过类名修改。

class Dog:count = 0def _init_(self,name,age)self.name = nameself.age = ageDog.count += 1 #在初始化时增加count的值def bark(self):print("Woof!")
	在类中,属性是对象的特征或数据,属性通常在构造方法中初始化,并通过self关键字来引用。
b、python的内置类属性
  1. dict : 类的属性(包含一个字典,由类的数据属性组成)
  2. doc :类的文档字符串
  3. name: 类名
  4. module: 类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.module
    等于 mymod)
  5. bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
c、对象属性

对象属性是对象特征的描述,定义非常灵活,可在方法内部定义,也可在调用实例时添加如scf.name和self.age都是对象属性。私有属性也是一种对象属性。

d、私有属性

在实例变量self前加单个下划线,以保护变量,变量并不是真正的受保护,这只是Python开发者的约定,在看到单个前置下划线的变量时,并不会尝试访问和修改它,双前置下划线会让Python解释器重写属性的名称,以达到保护变量的目的。

e、构造函数

介绍:

构造函数(也称为初始化方法)是一个特殊的方法,当创建类的新实例时会自动调用。在Python中,构造函数的名称是__init__。

代码示例:

class Person:  def __init__(self, name, age):  self.name = name  self.age = age  p = Person("Alice", 30)  
print(p.name)  # 输出: Alice  
print(p.age)   # 输出: 30
f、析构函数

介绍:

析构函数在对象被销毁前(例如,对象被垃圾回收)调用,用于执行清理操作,如关闭文件或释放资源。在Python中,没有显式的析构函数,但可以使用__del__方法作为析构函数的类似物。然而,由于Python的垃圾回收机制,__del__方法并不总是会被调用。

代码示例(虽然不推荐依赖__del__进行资源清理):

class MyClass:  def __del__(self):  print("对象被销毁")  # 创建一个对象,但在大多数情况下,我们不会看到"对象被销毁"的输出  
obj = MyClass()
g、对象方法

介绍:

对象方法是类的实例可以调用的方法。它们通常用于操作实例的状态。

代码示例:

class Circle:  def __init__(self, radius):  self.radius = radius  def area(self):  return 3.14 * self.radius ** 2  circle = Circle(5)  
print(circle.area())  # 输出圆的面积
h、私有方法

介绍:

Python没有真正的私有方法或属性,但有一种约定俗成的做法是使用双下划线前缀来表示“私有”成员。然而,这只是一个命名约定,Python仍然可以从外部访问这些成员。真正的“私有”性是通过其他机制(如属性装饰器)实现的。

代码示例:

class MyClass:  def __private_method(self):  print("这是一个'私有'方法")  def public_method(self):  self.__private_method()  # 类的内部可以调用它  # 但仍然可以从外部“访问”它(尽管不推荐)  
obj = MyClass()  
obj._MyClass__private_method()  # 注意这里的命名转换
i、Python内置类方法

Python的内置方法(也称为魔法方法或双下划线方法)确实非常多,它们提供了丰富的功能和定制性。这里是一些常用的内置方法的补充,以及它们的简要说明和示例:

1. 初始化与销毁
__init__(self, ...): 构造函数,初始化对象时调用。
__del__(self): 析构函数,对象被销毁前调用(但通常不推荐在__del__中执行重要清理工作)。
2. 字符串与表示
__str__(self): 返回对象的“非正式”字符串表示。
__repr__(self): 返回对象的“正式”字符串表示,供调试使用。
3. 数值运算
__add__(self, other): 实现+运算符。
__sub__(self, other): 实现-运算符。
__mul__(self, other): 实现*运算符。
__truediv__(self, other): 实现/运算符(Python 3中的真实除法)。
__floordiv__(self, other): 实现//运算符(整数除法)。
__mod__(self, other): 实现%运算符(取模)。
__pow__(self, other): 实现**运算符(幂运算)。
4. 序列操作
__len__(self): 返回对象的长度或元素个数。
__getitem__(self, index): 实现item[index]。
__setitem__(self, index, value): 实现item[index] = value。
__delitem__(self, index): 实现del item[index]。
__contains__(self, item): 实现in运算符。
5. 比较运算
__lt__(self, other): 实现<运算符。
__le__(self, other): 实现<=运算符。
__eq__(self, other): 实现==运算符。
__ne__(self, other): 实现!=运算符。
__gt__(self, other): 实现>运算符。
__ge__(self, other): 实现>=运算符。
6. 集合操作
__hash__(self): 返回对象的哈希值(如果对象是可哈希的)。
__iter__(self): 返回一个迭代器对象。
__next__(self): 迭代器对象的next()方法。
__getattribute__(self, name): 访问对象属性时调用。
__setattr__(self, name, value): 设置对象属性时调用。
__delattr__(self, name): 删除对象属性时调用。
7. 上下文管理
__enter__(self): 使用with语句时进入上下文时调用。
__exit__(self, exc_type, exc_val, exc_tb): 使用with语句时退出上下文时调用。
8. 容器操作
__contains__(self, item): 实现in运算符,判断容器中是否包含某个元素。
__iter__(self): 返回一个迭代器对象,用于遍历容器中的元素。
示例:自定义一个可迭代对象
python
class MyRange:  def __init__(self, start, end):  self.value = start  self.end = end  def __iter__(self):  return self  def __next__(self):  if self.value < self.end:  current_value = self.value  self.value += 1  return current_value  else:  raise StopIteration  # 使用自定义的MyRange类  
for i in MyRange(0, 5):  print(i)  # 输出: 0 1 2 3 4

5.3 类的继承

继承是面向对象编程的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以继承父类的特征,也可以通过定义自己的属性和方法来扩展或修改父类的行为。一个类继承另一个类时,它将自动获得另一个类的属性和方法,原有的类称为父类。
新类称为子类,子类不能继承父类的私有属性和方法,但能继承父类其他的属性和方法,同时还可以定义自己的属性和方法,子类定义格式如下:

class 子类名(父类名)

(1)子类的方法_init_

如果子类重新定义了父类方法后,还需要访问父类的同名方法,如__init__,可以使用super关键字。

(2)给子类定义属性和方法

一个类继承另一个类后,可添加区分子类里父类所需的新属性和方法。
定义子类时,可以根据需要添加任意数量的属性和方法,但要注意子类中只添加子类独有的属性和方法,如果是所有子类都拥有的,应该添加到父类的属性和方法中。

(3)重写父类方法

对于父类中的方法,如果它不符合子类模拟的实物的行为,都可对其进行重写,为此,可在子类中定义与父类同名的方法,这样,python程序在运行时将不会考虑这个父方法,而只考虑同名的子类方法。

(4)将实例用作属性

使用代码模拟实物时,可能会发现需要给类添加的细节越来越多,属性和方法清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来,将大类拆分成多个协同工作的小类,即将一个类的实例作为另一个类的属性。

5.4 导入类

类的编写也要遵循模块化编程,导入类有多种方式,可以导入单个类,导入多个类,导入整个模块导入模块中的所有类等。

相关文章:

生命在于学习——Python人工智能原理(2.5.1)

五、Python的类与继承 5.1 Python面向对象编程 在现实世界中存在各种不同形态的事物&#xff0c;这些事物之间存在各种各样的联系。在程序中使用对象来映射现实中的事物&#xff0c;使用对象之间的关系描述事物之间的联系&#xff0c;这种思想用在编程中就是面向对象编程。 …...

visual studio 2022配置和使用jsoncpp

下载 jsoncpp下载位置&#xff1a; GitHub - open-source-parsers/jsoncpp: A C library for interacting with JSON. 编译库 1、下载完成之后解压 2、在解压文件的makefiles文件下有个vs71&#xff0c;在vs71中有visual studio项目&#xff0c;不过这里的项目是visual stud…...

Spring Boot中的动态数据源切换

Spring Boot中的动态数据源切换 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何在Spring Boot中实现动态数据源切换的技术。动态…...

npm error code EUNSUPPORTEDPROTOCOL 解决

更换包管理工具 npm i -g pnpm pnpm install pnpm run dev 参考 https://blog.csdn.net/qq_42592823/article/details/137541827...

基于改进天鹰优化算法(IAO)优化支持向量机(SVM)数据分类预测(IAO-SVM)

改进天鹰优化算法(IAO)见&#xff1a;【智能优化算法】改进的AO算法(IAO)-CSDN博客 支持向量机(SVM)数据分类预测&#xff1a;基于支持向量机(SVM)的数据分类预测-CSDN博客 代码原理 基于改进天鹰优化算法&#xff08;IAO&#xff09;优化支持向量机&#xff08;SVM&#xf…...

【数学建模】—【Python库】—【Numpy】—【学习】

目录 ​编辑 1. NumPy安装 2. ndarray对象 1. 创建ndarray 1.从列表或元组创建&#xff1a; 2.使用内置函数创建&#xff1a; 2. ndarray属性 3. 数组运算 1. 基本运算 2. 数学函数 3.统计函数 4. 数组索引与切片 1. 一维数组索引与切片 2.多维数组索引与切片 5.…...

C语言一些逆置算法

目录 整数逆置 数组逆置 矩阵转置 整数逆置 如7234变为4327 int Reversed(int n){int x,reversed_n0;while(n!0){xn%10; reversed_nreversed_n*10x;nn/10;}return reversed_n; }数组逆置 将数组{1,2,3,4,5,6}逆置为{6,5,4,3,2,1} void Reverse(int a[],int l,int r){w…...

CentOS7安装MongoDB

文章目录 一、 环境准备二、安装包下载三、 软件安装和启动3.1 将下载好的安装包上传到 Linux 服务器某个目录下&#xff0c;并使用以下命令解压压缩包。3.2 将解压后的目录移动到 /usr/local 目录下&#xff0c;并改名为 mongodb 。3.3 进入 mongo 目录&#xff0c;并创建文件…...

python笔记----少儿编程课程

第1课&#xff1a; 认识新朋友-python 知识点&#xff1a; 1、在英文状态下编写Python语句。 2、内置函数print()将结果输出到标准的控制台上&#xff0c;它的基本语法格式如下&#xff1a; print("即将输出的内容") #输出的内容要用引号引起来&#xff0c;可…...

RabbitMQ实践——搭建单人聊天服务

大纲 创建Core交换器用户登录发起聊天邀请接受邀请聊天实验过程总结代码工程 经过之前的若干节的学习&#xff0c;我们基本掌握了Rabbitmq各个组件和功能。本文我们将使用之前的知识搭建一个简单的单人聊天服务。 基本结构如下。为了避免Server有太多连线导致杂乱&#xff0c;下…...

GPT-5

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术突破预测 &#x1f348;算法进步 &#x1f348;理解力提升 &#x1f348;行业推动力 &#x1f349;人机协作的未来 &#x1f348;辅助决策 &#x1f348;增强创造力 &#x1f348;复杂任务中的角色 &#x1f348;人…...

Vip-智能预估+大数据标签+人群全选=用户分群!

Mobpush用户分群功能升级&#xff0c;创建推送入口vip用户可进入自有选择标签创建“用户分群”&#xff0c;相比于免费标签&#xff0c;“用户标签”维度更丰富。在应用基础属性上&#xff0c;增加“品牌”、“网络状态”、“运营商”&#xff0c;众所周知&#xff0c;不同厂商…...

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…...

为什么选择Xinstall CPA结算系统?因为它能帮您解决这些痛点!

在App推广和运营的道路上&#xff0c;我们时常面临着各种挑战和痛点。其中&#xff0c;结算系统的复杂性和不透明性往往成为制约我们发展的瓶颈。然而&#xff0c;有了Xinstall CPA结算系统&#xff0c;这些问题将迎刃而解&#xff0c;让您的App推广之路更加顺畅和高效。 一、…...

2024年【建筑电工(建筑特殊工种)】模拟试题及建筑电工(建筑特殊工种)作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年建筑电工(建筑特殊工种)模拟试题为正在备考建筑电工(建筑特殊工种)操作证的学员准备的理论考试专题&#xff0c;每个月更新的建筑电工(建筑特殊工种)作业考试题库祝您顺利通过建筑电工(建筑特殊工种)考试。 1、…...

解锁数字化转型的双引擎:MSP和CMP的力量

随着企业数字化转型的深入&#xff0c;云计算已经成为现代企业IT基础设施的重要组成部分。为了高效地管理和优化多云环境&#xff0c;企业通常会依赖管理服务提供商 (Managed Service Providers, MSP) 和云管理平台 (Cloud Management Platforms, CMP)。本文将探讨MSP和CMP的定…...

Pyecharts入门

数据可视化 Pyecharts简介 Apache ECharts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#…...

Socket编程详解(一)服务端与客户端的双向对话

目录 预备知识 视频教程 项目前准备知识点 1、服务器端程序的编写步骤 2、客户端程序编写步骤 代码部分 1、服务端FrmServer.cs文件 2、客户端FrmClient.cs文件 3、启动文件Program.cs 结果展示 预备知识 请查阅博客http://t.csdnimg.cn/jE4Tp 视频教程 链接&#…...

使用Python实现深度学习模型:强化学习与深度Q网络(DQN)

深度Q网络(Deep Q-Network,DQN)是结合深度学习与强化学习的一种方法,用于解决复杂的决策问题。本文将详细介绍如何使用Python实现DQN,主要包括以下几个方面: 强化学习简介DQN算法简介环境搭建DQN模型实现模型训练与评估1. 强化学习简介 强化学习是一种训练智能体(agent…...

Py-Spy、Scalene 和 VizTracer 的对比分析

在前几篇文章中&#xff0c;我们详细介绍了如何使用 py-spy、scalene 和 viztracer 进行性能分析和优化。今天&#xff0c;我们将对这三个性能分析工具进行详细对比&#xff0c;帮助你选择最适合你的工具。 工具简介 Py-Spy&#xff1a; 实时性能分析&#xff1a;Py-Spy 可以…...

软考架构师考试内容

软考系统架构设计师考试是中国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;中的一项高级资格考试&#xff0c;旨在评估考生是否具备系统架构设计的能力。根据提供的参考资料&#xff0c;考试内容主要包括以下几个方面&#…...

【MySQL基础篇】概述及SQL指令:DDL及DML

数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释&#xff1a;定义与基本概念&#xff1a; 数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库不仅仅是数据的简单堆积&#xff0c;而是遵循一定的规则…...

计算机网络 —— 网络字节序

网络字节序 1、网络字节序 (Network Byte Order)和本机转换 1、大端、小端字节序 “大端” 和” 小端” 表示多字节值的哪一端存储在该值的起始地址处&#xff1b;小端存储在起始地址处&#xff0c;即是小端字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节…...

区块链不可能三角

区块链不可能三角&#xff1a;探索去中心化、安全与可扩展性的权衡 引言 区块链技术自诞生以来&#xff0c;以其去中心化、透明、安全等特点吸引了全球的关注&#xff0c;成为金融科技领域的重要革新力量。然而&#xff0c;随着区块链应用的日益广泛&#xff0c;一个核心问题…...

新手第一个漏洞复现:MS17-010(永恒之蓝)

文章目录 漏洞原理漏洞影响范围复现环境复现步骤 漏洞原理 漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt在处理FEA&#xff08;File Extended Attributes&#xff09;转换时。该函数在将FEA list转换成NTFEA&#xff08;Windows NT FEA&#xff09;list前&am…...

代码随想录Day64

98.所有可达路径 题目&#xff1a;98. 所有可达路径 (kamacoder.com) 思路&#xff1a;果断放弃 答案 import java.util.*;public class Main {private static List<List<Integer>> adjList;private static List<List<Integer>> allPaths;private sta…...

Angular 指令

Angular 指令是 Angular 框架中的一项核心功能&#xff0c;它允许开发人员扩展 HTML 的功能&#xff0c;并创建可复用的组件和行为。以下是一些常见的 Angular 指令&#xff1a; 1. 组件指令 (Component Directives) 组件指令是最常用的一种指令&#xff0c;用于创建可复用的 U…...

移动端 UI 风格,书写华丽篇章

移动端 UI 风格&#xff0c;书写华丽篇章...

flutter开发实战-ListWheelScrollView与自定义TimePicker时间选择器

flutter开发实战-ListWheelScrollView与自定义TimePicker 最近在使用时间选择器的时候&#xff0c;需要自定义一个TimePicker效果&#xff0c;当然这里就使用了ListWheelScrollView。ListWheelScrollView与ListView类似&#xff0c;但ListWheelScrollView渲染效果类似滚筒效果…...

stable diffusion 模型和lora融合

炜哥的AI学习笔记——SuperMerger插件学习 - 哔哩哔哩接下来学习的插件名字叫做 SuperMerger,它的作用正如其名,可以融合大模型或者 LoRA,一般来说会结合之前的插件 LoRA Block Weight 使用,在调整完成 LoRA 模型的权重后使用改插件进行重新打包。除了 LoRA ,Checkpoint 也…...

企业英文网站建设的重要性/开网店3个月来亏了10万

前文链接&#xff1a;分数的加减法——C语言初学者代码中的常见错误与瑕疵(11) 重构 题目的修正 我抛弃了原题中“其中a, b, c, d是一个0-9的整数”这样的前提条件&#xff0c;因为这种限制毫无必要。只假设a, b, c, d是十进制整数形式的字符序列。 我也不清楚这种题目应该如何…...

深圳营销网站制作/关联词有哪些三年级

笔者之前为项目搭建了简易的CI环境&#xff0c;出于顾虑到以后可能还会有所需求&#xff0c;特此摘记下搭建的过程以及笔者遇到的一些问题&#xff1a;笔者的开发环境PHP 7.0Apache 2.4ThinkPHP 5.0Composer 1.6.5Windows Server 2008 R2 OS因为是TP5的项目&#xff0c;例行地在…...

2003 iis wordpress/西安关键词优化软件

prometheus 基本介绍 Prometheus 是一套开源的监控&#xff0c;报警、时间序列数据库的组合&#xff0c;起始是由 SoundCloud 公司开发的。随着发展&#xff0c;越来越多公司和组织接受采用Prometheus&#xff0c;社区也十分活跃&#xff0c;他们便将它独立成开源项目&#xf…...

新浪sae可以做网站么/北京优化网站公司

一:相关知识 WPF资源系统 1、资源定义 对我们开发有用的东西 都 叫资源 2、程序集资源 XAML-》BAML 寻址系统不同 3、对象资源 程序集资源 添加 引用 Pack URI Pack://application:,/程序集名称;版本号;公钥;component/Images/Logo.png 音视频文件 对象资源 1、保管与引用 保…...

网站备案需要钱吗/一诺网络推广公司

在element-ui的运用中&#xff0c;涉及到了select下拉列表。项目中需要将select的默认值给展示出来&#xff0c;需要设置默认值 在官方给出的文档时候 <script>export default {data() {return {options: [{value: 选项1,label: 黄金糕}, {value: 选项2,label: 双皮奶},…...

网站新闻后台怎么做/网站推广优化怎样

2017PHP程序员的进阶之路bryantbryant7 个月前又是一年毕业季&#xff0c;可能会有好多毕业生即将进入开发这个圈子&#xff0c;踏上码农这个不归路。根据这些年在开发圈子总结的LNMP程序猿发展轨迹&#xff0c;结合个人经验体会&#xff0c;总结出很多程序员对未来的迷漫&…...