生命在于学习——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 导入类

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

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

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

相关文章

C++笔记:实现一个字符串类(构造函数、拷贝构造函数、拷贝赋值函数)

实现一个字符串类String&#xff0c;为其提供可接受C风格字符串的构造函数、析构函数、拷贝构造函数和拷贝赋值函数。 声明依赖文件 其中ostream库用于打印标准输入输出&#xff0c;cstring库为C风格的字符串库 #include <iostream> #include <cstring> 声明命…

关于代购系统带来的便利性的研究报告

摘要&#xff1a; 本研究报告旨在深入探讨代购系统为消费者带来的显著便利性。通过对相关数据的分析、用户体验的调查以及行业发展的研究&#xff0c;详细阐述了代购系统在商品获取、价格优势、服务质量等方面的突出表现&#xff0c;以及其对现代消费模式的积极影响。 一、引言…

【python】OpenCV—Color Correction

文章目录 cv2.aruco 介绍imutils.perspective.four_point_transform 介绍skimage.exposure.match_histograms 介绍牛刀小试遇到的问题 参考学习来自 OpenCV基础&#xff08;18&#xff09;使用 OpenCV 和 Python 进行自动色彩校正 cv2.aruco 介绍 一、cv2.aruco模块概述 cv2.…

kubeadm 部署k8s集群[单master]

kubeadm 部署k8s集群 主机名地址角色配置kub-k8s-master192.168.75.100主节点2核2G 50Gkub-k8s-node1192.168.75.103工作节点1核2G 50Gkub-k8s-node2192.168.75.104工作节点/haproxy1核2G 50G 一、安装docker[集群] # 一键安装docker脚本 curl -L https://gitea.beyourself.…

语言模型之LLaMA

LLaMA&#xff08;Large Language Model Meta AI&#xff09;是由 Meta&#xff08;前 Facebook&#xff09;开发的大型语言模型&#xff0c;它是一种基于深度学习的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;旨在在多个语言理解和生成任务中达到高水平的性能。…

骨传导耳机哪个牌子值得入手?精选热销榜TOP5推荐!

短短数年&#xff0c;骨传导耳机的市场规模迅速扩大&#xff0c;其受欢迎程度可见一斑。但身为拥有十二年经验的音频专家&#xff0c;我在此有义务提醒大家&#xff0c;在选择骨传导耳机时一定要谨慎。面对市面上的众多品牌&#xff0c;一定不要盲目入手&#xff0c;不然很容易…

leetcode提速小技巧

据我所知&#xff0c;leetcode可能是按最难那个用例给你打分的&#xff0c;非难题的用时好坏不完全看复杂度&#xff0c;因为可能都差不多&#xff0c;O(n/2)和O(n)虽然都是O(n)&#xff0c;但是反应到成绩上是不同的&#xff0c;所以&#xff0c;尽可能的在条件足够的情况下提…

CVE-2018-8120漏洞提权:Windows 7的安全剖析与实战应用

CVE-2018-8120漏洞提权&#xff1a;Windows 7的安全剖析与实战应用 在网络安全的世界里&#xff0c;漏洞利用常常是攻击者用来获取系统控制权的捷径。2018年发现的CVE-2018-8120漏洞&#xff0c;针对Windows 7操作系统&#xff0c;提供了一个这样的途径。本文将深入分析这一漏…

Java鲜花下单预约系统源码小程序源码

让美好触手可及 &#x1f338;一、开启鲜花新篇章 在繁忙的都市生活中&#xff0c;我们总是渴望那一抹清新与美好。鲜花&#xff0c;作为大自然的馈赠&#xff0c;总能给我们带来无尽的惊喜与愉悦。但你是否曾因为工作繁忙、时间紧张而错过了亲自挑选鲜花的机会&#xff1f;今…

KVB交易平台: 美元兑日元升破161,这一趋势会继续吗?

在2024年6月28日&#xff0c;美元在亚洲交易市场中表现强劲&#xff0c;接近四十年来的新高&#xff0c;预计将连续第二个季度上涨。与此同时&#xff0c;日本日元持续走低&#xff0c;跌至38年以来的新低&#xff0c;首次突破161关口。在东京交易中&#xff0c;日元兑美元贬值…

小程序反编译后报错“_typeof3 is not a function”

详情->本地设置->取消勾选“将JS编译成ES5” 参考链接&#xff1a;https://blog.csdn.net/csl12919/article/details/131569914

Ubuntu网络管理命令:netstat

安装Ubuntu桌面系统&#xff08;虚拟机&#xff09;_虚拟机安装ubuntu桌面版-CSDN博客 顾名思义&#xff0c;netstat命令不是用来配置网络的&#xff0c;而是用来查看各种网络信息的&#xff0c;包括网络连接、路由表以及网络接口的各种统计数据等。 netstat命令的基本语法如…

湿气易藏在身体的这3个地方,1个方法“定位祛湿”,摆脱它!

6月的雨&#xff0c;滴滴答答的下了十几天了&#xff0c;体内湿气越来越重&#xff0c;皮肤发痒、身体沉重、四肢乏力、总犯困、还出现了消化不良&#xff0c;甚至腹泻的情况…… 为什么我都在积极喝祛湿汤&#xff0c;却不见效呢&#xff1f; 一个很重要的原因可能是&#xff…

融入云端的心跳:在Spring Cloud应用中集成Eureka Client

融入云端的心跳&#xff1a;在Spring Cloud应用中集成Eureka Client 引言 在微服务架构中&#xff0c;服务发现是一个关键组件&#xff0c;它允许服务实例之间相互发现并通信。Netflix Eureka是Spring Cloud体系中广泛使用的服务发现框架。Eureka提供了一个服务注册中心&…

「ETL趋势」FDL数据开发支持版本管理、实时管道支持多对一、数据源新增支持神通

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.8最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

企业出海的浪潮下,如何利用亚马逊云(AWS)更好地应对?

在全球化的浪潮下&#xff0c;越来越多的企业开始将目光投向国际市场。在这个数字化时代&#xff0c;云计算技术成为企业出海的必备利器之一。AWS云作为全球领先的云服务提供商&#xff0c;凭借其卓越的性能和完善的服务体系&#xff0c;成为众多企业出海的首选。 一、出海为什…

CDN入门

在腾讯云上使用CDN 1、参考 内容分发网络 CDN 从零开始配置 CDN-快速入门-文档中心-腾讯云 2、验证 访问&#xff1a; 登录 - 腾讯云 Window10本地电脑使用命令验证 nslookup -qt-cname hmblogs.com.cn Ubuntu下验证 dig hmblogs.com.cn

SpringBoot整合Solr进行搜索(简单)

SpringBoot整合Solr进行搜索 创建SpringBoot项目pom中加入Solr依赖配置 Solr创建实体编写一个简单的ID查询打印结果 参考文章 创建SpringBoot项目 这里基于aliyun提供的快速构建一个项目。我们这主要是整合Solr。 pom中加入Solr依赖 maven下载地址 pom中加入以下内容&#x…

「ETL趋势」FDL定时任务区分开发/生产模式、API输入输出支持自定义响应解析

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.7最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

鸿蒙开发设备管理:【@ohos.brightness (屏幕亮度)】

屏幕亮度 该模块提供屏幕亮度的设置接口。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import brightness from ohos.brightness;brightness.setValue setValue(value: number):…