5.Python学习:面向对象

news2024/9/21 0:39:40

1.面向对象和面向过程的区别

以下五子棋为例:
在这里插入图片描述

2.类和实例

(1)类是抽象的模板,实例是根据模板创建出来的具体的对象
(2)比如人类就是一个类,刘亦菲就是人类的一个实例

2.1 新建类和类的实例化

class 类名:
	def 方法名():
		代码

初始化方法不负责创建对象,而是给对象赋予初始值。创建对象是构造方法做的
在这里插入图片描述
普通的类方法都有self,所有带有self的属性或方法,代表可以共用。也就是实例本身
在这里插入图片描述

在这里插入图片描述

class Rectangle:
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width

rec=Rectangle(6,4)#实例化为一个长为6宽为4的长方形
print(rec.perimeter())
print(rec.area())

在这里插入图片描述

2.2 实例方法、静态方法和类方法

2.2.1实例方法

类里面的方法是实例方法,不能由类调用,需要先实例化对象,之后由实例对象调用

class Rectangle:
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
rec.perimeter()#实例调用方法
Rectangle.perimeter()//这样会报错

2.2.2 类方法

有时需要使用可以由类调用的方法,可以使用@classmethod装饰器,声明某个方法是类方法
类方法:类和实例都可以调用,类方法可以调用类属性,不能调用self的属性
类属性:定义在类里,不能定义在__init__里,否则类不能调用,只能实例调用。
装饰器:待补充

class Rectangle:
	color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)#不能调用self.width
rec=Rectangle(6,4)#实例化为一个长为6宽为4的长方形
Rectangle.features()//类调用
rec.features()//实例调用

在这里插入图片描述

2.2.3 静态方法

静态方法可以由类调用
在这里插入图片描述

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
    @staticmethod
    def sumdata(a,b):
        return a+b
print(Rectangle.sumdata(1,2))

在这里插入图片描述

3.类的继承

继承是从已有的类中派生出新的类,新的类可以使用已有类的属性和行为,并扩展新的能力
比如小学生是学生的子类,有学生的共有特征,也有小学生的自有特征

3.1完全继承

子类不做任何改变,完全继承父类的所有属性和方法

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
    @staticmethod
    def sumdata(a,b):
        return a+b

#完全继承
class Square(Rectangle):
    pass
square=Square(6,6)
print(square.area())

在这里插入图片描述

3.2 部分继承

在这里插入图片描述

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
    @staticmethod
    def sumdata(a,b):
        return a+b
//部分继承,重写部分父类方法
class Squre1(Rectangle):
    def __init__(self,side):
        self.length=side
        self.width=side
square=Squre1(6)
print(square.area())

在这里插入图片描述

3.3 继承并追加super()

在这里插入图片描述

class Rectangle:
    color='red'# 类的属性
    def __init__(self,length,width):
        self.length=length#将用户传的length作为长方形自身的length
        self.width=width#将用户传的width作为长方形自身的width
    def perimeter(self):
        return (self.length+self.width)*2
    def area(self):
        return self.length*self.width
    @classmethod
    def features(cls):
        print("两边长相等,两边宽相等,长和宽的角度是90度")
        print('颜色是',cls.color)
#继承并追加
class Square2(Rectangle):
    def __init__(self,side):
        self.length=side
        self.width=side
    @classmethod
    def features(cls):
        super().features()//先继承父类的features方法
        print("长和宽相等")//再新增自己的东西
square=Square2(6)
square.features()

在这里插入图片描述

3.4Object

所有类都是object的子类,无论是否声明继承,实际都继承了object
s

class Class1(object):
	pass
两种写法是效果一样的
class Class:
	pass
print(Class1.__dict__)
print(Class1.__doc__)
print(Class1.__name__)
	

3.5多继承

  • 一个父类可以有多个父类
  • 父类中有同名方法时,按继承顺序调用先继承的
    水路两通汽车:既有水性又可以路上跑
#多继承
class Money1:
    def money1(self):
        print('一个亿')
class Money2:
    def money2(self):
        print('两个亿')
class Human(Money1,Money2):
    pass
man=Human()
man.money1()
man.money2()

在这里插入图片描述

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

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

相关文章

【uniapp-ios】App端与webview端相互通信的方法以及注意事项

前言 在开发中,使用uniapp开发的项目开发效率是极高的,使用一套代码就能够同时在多端上线,像笔者之前写过的使用Flutter端和webview端之间的相互通信方法和问题,这种方式本质上实际上是h5和h5之间的通信,网上有非常多…

计算机的错误计算(二十五)

摘要 介绍(不)停机问题。给了一个算式,当计算机的输出为0时,一般需要提高计算精度继续计算,一直到获得非0值或有效数字。但是,由于事先不清楚算式的准确值是否为0或不为0,因此往往陷入两难境地…

LLM - Transformer 的 多头自注意力(MHSA) 理解与源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140281680 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 在 Transformer 中,多头自注意力机制 (MHSA, Multi-Head Self-Attenti…

关系型数据库MySQL和时序数据库的区别?

时序数据库和关系型数据库是两种不同类型的数据库系统,它们在设计理念、存储结构、性能优化等方面有显著差异,以适应不同的应用场景和需求。具体对比如下: 数据存储结构 时序数据库:使用列式存储,每条记录通常包含时间…

Johnson Counter

目录 描述 输入描述: 输出描述: 参考代码 描述 请用Verilog实现4位约翰逊计数器(扭环形计数器),计数器的循环状态如下。 电路的接口如下图所示。 输入描述: input clk , input …

力扣喜刷刷--day1

1.无重复字符的最长子串 知识点:滑动窗口 基本概念 窗口:窗口是一个连续的子序列,可以是固定长度或可变长度。滑动:窗口在数据序列上移动,可以是向左或向右。边界:窗口的起始和结束位置。 应用场景 字符…

YOLOv10改进 | Conv篇 | 利用DualConv二次创新C2f提出一种轻量化结构(轻量化创新)

一、本文介绍 本文给大家带来的改进机制是利用DualConv改进C2f提出一种轻量化的C2f,DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合33和11的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。Dual…

关于 off-by-one 的学习

pwn的功底还很浅,仅仅是记录自己学习的一点心得体会。 后续随着学习深入,还会补知识点和题目上来。 知识点 优秀的学习资料 关于off by null的学习总结 | ZIKH26 Chunk Extend and Overlapping | ctfwiki 一点理解 与off-by-one联系很紧密的就是上…

Fastapi在docekr中进行部署之后,uvicorn占用的CPU非常高

前一段接点小活,做点开发,顺便学了学FASTAPI框架,对比flask据说能好那么一些,至少并发什么的不用研究其他的asgi什么的,毕竟不是专业开发,能少研究一个东西就省了很多的事。 但是部署的过程中突然之间在do…

典型案例 | 基于全数字实时仿真的嵌入式DevOps解决方案

为丰富浙江省信息技术应用创新(以下简称“信创”)产业生态,在全社会各领域形成示范效应,浙江省经信厅联合省密码管理局开展2023年浙江省深化信创典型案例评选工作。 经过征集申报、专家评选、名单公示等程序,确定36个…

秒懂设计模式--学习笔记(6)【创建篇-建造者模式】

目录 5、建造者模式5.1 介绍5.2 建造步骤的重要性5.3 地产开发商的困惑5.4 建筑施工方5.5 工程总监5.6 项目实施5.7 建造者模式的各角色定义5.8 建造者模式 5、建造者模式 5.1 介绍 建造者模式(Builder)又称为生成器模式,主要用于对复杂对象…

20.呼吸灯:利用PWM控制小灯在相同时间段内的不同占空比

(1)设计一段代码,实现led灯在一秒内由完全熄灭到完全点亮,在第二秒由完全点亮转为完全熄灭,循环往复。 (2)Verilog代码: module breath_led(clk,reset_n,led);input clk;input res…

Open3D 计算点云的欧式距离

目录 一、概述 1.1欧式距离定义 1.2作用和用途 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后点云 一、概述 在Open3D中,compute_point_cloud_distance函数用于计算两个点云之间的距离。具体来说,它计算的是源点云…

进程 VS 线程(javaEE篇)

🍁 个人主页:爱编程的Tom💫 本篇博文收录专栏:JavaEE初阶👉 目前其它专栏:c系列小游戏 c语言系列--万物的开始_ 等 🎉 欢迎 👍点赞✍评论⭐收藏💖三连支…

一.4 处理器读并解释储存在内存中的指令

此刻,hello.c源程序已经被编译系统翻译成了可执行目标文件hello,并被存放在硬盘上。要想在Unix系统上运行该可执行文件,我们将它的文件名输入到称为shell的应用程序中: linux>./hello hello, world linux> shell是一个命令…

YOLOv10改进 | 添加注意力机制篇 | 添加FocusedLinearAttention助力yolov10实现有效涨点(含二次创新PSA机制)

一、本文介绍 本文给大家带来的改进机制是Focused Linear Attention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测精度),旨在提高效率和表现力。其解决了两个在传统线性注意力…

博美犬插画:成都亚恒丰创教育科技有限公司

​博美犬插画:萌动心灵的细腻笔触 在浩瀚的艺术海洋中,有一种艺术形式总能以它独有的温柔与细腻,触动人心最柔软的部分——那便是插画。而当插画遇上博美犬这一萌宠界的明星,便诞生了一幅幅令人爱不释手的作品,成都亚…

云计算【第一阶段(28)】DNS域名解析服务

一、DNS解析的定义与作用 1.1、DNS解析的定义 DNS解析(Domain Name System Resolution)是互联网服务中的一个核心环节,它负责将用户容易记住的域名转换成网络设备能够识别和使用的IP地址。一般来讲域名比 IP 地址更加的有含义、也更容易记住…

DNS隧道

dnscat2是一个DNS隧道工具,通过DNS协议创建加密的命令和控制通道,它的一大特色就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成。包括:文件上传、下载、反弹Shell 目录 Dnscat2安装 解决bundle instal1特别慢问题 客户…

4.动态SQL(if,choose,where,set,trim,foreach遍历)的使用+$和#的区别

文章目录 动态sql一、动态sql1.if条件判断2、choose、when、otherwise3、where标签4、set标签5、trim标签1)替代where标签效果2) 生成set标签效果 6、foreach迭代遍历1)属性 7.SQL标签-提取重用的SQL代码片段8、bind标签9.MyBatis中${}和#{}的区别: 动态sql 一、动态sql 常见…