5.Python学习:面向对象

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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

王老师 linux c++ 通信架构 笔记(三)安装 xftp、

(11)调整 xshell 终端的字体大小,默认字体大小是 9 : (12) 共享文件夹 hgfs 的含义: (13)安装 xftp , 傻瓜式安装,出了修改下默认安装位置。 操作…

上位机图像处理和嵌入式模块部署(mcu项目2:串口日志记录器)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 淘宝上面有一个商品蛮好玩的,那就是日志记录器。说是记录器,其实就是一个模块,这个模块的输入是一个ttl串口&am…

18.动态规划之斐波那契数列模型1

1.第N个斐波那契数 1137. 第 N 个泰波那契数 - 力扣(LeetCode) 做题流程 1. 状态表示: 这道题可以【根据题目的要求】直接定义出状态表示: dp[i] 表示:第 i 个泰波那契数的值。 2. 状态转移方程: …

Social to Sales全链路,数说故事专享会开启出海新视角

————瞎出海,必出局 TikTok,这个充满活力的短视频平台,已经成为全球范围内不可忽视的电商巨头。就在6月8日,TikTok美区带货直播诞生了首个“百万大场”。在此之前,百万GMV被视为一道难以逾越的高墙。以TikTok为首的…

Zabbix分布式监控

目录 分布式监控架构 实现分布式监控的步骤 优点和应用场景 安装Zabbix_Proxy Server端Web页面配置 测试 Zabbix 的分布式监控架构允许在大规模和地理上分散的环境中进行高效的监控。通过分布式监控,Zabbix 可以扩展其监控能力,支持大量主机和设备…

Android - 云游戏本地悬浮输入框实现

一、简述 云游戏输入法分两种情况,以云化原神为例,分为 云端输入法 和 本地输入法,运行效果如下: 云端输入法本地输入法云端输入法 就是运行在云端设备上的输入法,对于不同客户端来说(Android、iPhone),运行效果一致。 本地输入法 则是运行在用户侧设备上的输入法,对…

WordPress开发进群V2主题源码,多种引流方法,引私域二次变现

WordPress开发进群V2主题源码,多种引流方法,引私域二次变现 全新前端UI界面,多种前端交互特效让页面不再单调,进群页面群成员数,群成员头像名称,每次刷新页面随机更新不重复,最下面评论和点赞也…

C语言编程3:运算符,运算符的基本用法

C语言3🔥:运算符,运算符的基本用法 一、运算符🌿 🎇1.1 定义 运算符是指进行运算的动作,比如加法运算符"“,减法运算符”-" 算子是指参与运算的值,这个值可能是常数&a…

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 常见…

React -- useState状态更新异步特性——导致获取值为旧值的问题

useState状态异步更新 问题导致的原因解决办法进一步分析后续遇到的新问题 问题 const [isSelecting, setIsSelecting] useState(false);useEffect(() > {const handleKeyDown (event) > {if (event.key Escape) {if(isSelectingRef){//.......setIsSelecting(!isSele…

js使用proxy代理监听控制事件

本文为proxy代理的实例应用,有关代理的内容可以参考: js语法---理解反射Reflect对象和代理Proxy对象 监听事件 要监听dom元素的事件,我们会采用回调触发的方式来执行操作, 而触发事件的过程很明显是一个异步操作,异…

Oracle中EXIT Statement用于终止循环语句的关键字

Oracle的EXIT Statement是PL/SQL编程语言中用于终止循环语句的关键字。它有两种主要形式:无条件EXIT和条件EXIT WHEN。以下是对Oracle EXIT Statement的详细解释: 1. 无条件EXIT 语法:EXIT; 作用:无条件地终止当前循环。当程序执…

【咨询】企业数字档案馆(室)建设方案-模版范例

导读:本模版来源某国有大型医药行业集团企业数字档案馆(室)建设方案(一期300W、二期250W),本人作为方案的主要参与者,总结其中要点给大家参考。 目录 1、一级提纲总览 2、项目概述 3、总体规…

办公必备——ONLYOFFICE8.1版本桌面编辑器

一、介绍ONLYOFFICE ONLYOFFICE是一款免费的开源办公软件,它可以让你创建、编辑和分享文档、表格和演示文稿。就像微软的Office一样,但它是完全免费的,而且可以在多种设备上使用,包括电脑和手机。它还支持多人同时在线编辑文档&am…

SpringCloud 负载均衡

目录 一、负载均衡 1、问题 2、什么是负载均衡 服务端负载均衡 客户端负载均衡 二、Spring Cloud LoadBalance 1、使用 Spring Cloud LoadBalance 2、负载均衡策略 3、LoadBalancer 原理 一、负载均衡 1、问题 我们来看一下前面写的代码&#xff1a; List<Serv…

抖音矩阵云剪系统saas源码 短视频矩阵获客管理系统

2024抖音矩阵云混剪系统是一款专业的短视频营销管理工具。该系统支持多平台多账号的集中式管理&#xff0c;并实现一键式作品发布功能。它配备了智能标题生成和关键词优化工具&#xff0c;以及排名查询机制&#xff0c;帮助用户提升内容在平台上更好的矩阵管理. 智能剪辑 托管发…

java中 使用数组实现需求小案例

Date: 2024.04.08 18:32:57 author: lijianzhan 需求实现&#xff1a; 设计一个java类&#xff0c;java方法&#xff0c;根据用户手动输入的绩点&#xff0c;从而获取到绩点最高的成绩。 实现业务逻辑的代码块 import java.util.Scanner;public class PointDemo {/*** 需求&…

Python 如何实现数据驱动的接口自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Pyt…

【Java]认识泛型

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 除了 Integer 和 Character&#xff0c; 其余基本类型的包装类都是首字母大写。 泛型 泛型是在JDK1.5引入的…

spring boot 3.x版本中集成spring security 6.x版本进行实现动态权限控制解决方案

一、背景 最近在进行项目从jdk8和spring boot 2.7.x版本技术架构向jdk17和spring boot 3.3.x版本的代码迁移&#xff0c;在迁移过程中&#xff0c;发现spring boot 3.3.x版本依赖的spring security版本已经升级6.x版本了&#xff0c;语法上和spring security 5.x版本有很多地方…