python之面向对象

面向对象

class Func:def a1(self,name,age):print("我是{}今年{}岁了".format(name,age))def a2(self,home,price):print("我家在{}有{}钱".format(home,price))
obj=Func()
obj.a1("杨振浩",19)
obj.a2("河南",100)
#一般传递的参数多,且类中的函数功能类似时,使用class类
class Func:def __init__(self,name,age,home,price):self.name=nameself.age=ageself.home=homeself.price=pricedef a1(self):print("我是{}今年{}岁了".format(self.name,self.age))def a2(self):print("我家在{}有{}钱".format(self.home,self.price))
obj=Func("杨振浩",19,"河南",100)
obj.a1()
obj.a2()
​

数据的封装

data_list=[]
while True:name=input("输入姓名:")if name=='q':breakage=input("输入年龄:")#构建一个字典info={"name":name,"age":age}data_list.append(info)
print(data_list)
for item in data_list:print(item['name'])print(item['age'])
#封装1
class Func:def __init__(self,name,age):self.name=nameself.age=age
#data_list=[
# 对象(name="root",age=10)
# ]
data_list=[]
while True:name=input("输入姓名:")if name == 'q':breakage=input("输入年龄:")#创建对象info=Func(name,age)data_list.append(info)
print(data_list)
for item in data_list:print(item.name)print(item.age)#输入姓名:root
#输入年龄:123
#输入姓名:daidai
#输入年龄:1
#输入姓名:q
#[<__main__.Func object at 0x000001C0A00CE360>, <__main__.Func object at 0x000001C0A00CE3C0>]
#root
#123
#daidai
#1
#封装2
class Func:def __init__(self,name,age):self.name=nameself.age=agedef show(self):message="我的年龄是{},我今年{}岁了".format(self.name,self.age)print(message)
#data_list=[
#对象1(name="root",age=10)
#对象2(name="daidai",age=199)
# ]
data_list=[]
while True:name=input("输入姓名:")if name == 'q':breakage=input("输入年龄:")#创建对象info=Func(name,age)data_list.append(info)
print(data_list)
for item in data_list:item.show()
#输入姓名:root
#输入年龄:12
#输入姓名:daidai
#输入年龄:34
#输入姓名:q
#[<__main__.Func object at 0x00000278374AE510>, <__main__.Func object at 0x00000278374AE5A0>]
#我的年龄是root,我今年12岁了
#我的年龄是daidai,我今年34岁了
class Police:def __init__(self,name,blood):self.name=nameself.blood=blooddef catch(self,bad):#警察抓小偷self.blood=self.blood+100bad.blood=bad.blood-100print("{}抓住了小偷{},警察血量为{},小偷血量为{}".format(self.name,bad,self.blood,bad.blood))def smoking(self):self.blood=self.blood-50print("{}吸烟,警察血量为{}".format(self.name,self.blood))def shoot(self,bad):self.blood=self.blood+100bad.blood=bad.blood-200print("{}射击了小偷{},警察血量为{},小偷血量为{}".format(self.name,bad,self.blood,bad.blood))def __str__(self):return self.name
class Terriorist:def __init__(self,name,blood):self.name=nameself.blood=blooddef shoot(self,good):self.blood=self.blood+100good.blood=good.blood-200print("{}射击了警察{},小偷血量为{},警察血量为{}".format(self.name,good,self.blood,good.blood))def bomb(self,good):self.blood=self.blood-10good.blood=good.blood-100print("{}炸弹了警察{},小偷血量为{},警察血量为{}".format(self.name,good,self.blood,good.blood))def __str__(self):return self.name
p1=Police("警察1",1000)
p2=Police("警察2",1500)
t1=Terriorist("小偷1",1000)
t2=Terriorist("小偷2",800)
t3=Terriorist("小偷3",1200)
p1.shoot(t2)
p1.catch(t1)
p1.shoot(t2)
t2.bomb(p1)
#警察1射击了小偷小偷2,警察血量为1100,小偷血量为600
#警察1抓住了小偷小偷1,警察血量为1200,小偷血量为900
#警察1射击了小偷小偷2,警察血量为1300,小偷血量为400
#小偷2炸弹了警察警察1,小偷血量为390,警察血量为1200

三大特性

面向对象的三大特性

  • 封装,将数据封装到对象中

  • 继承,‘子承父业'

  • 多态,python中默认支持多态

封装

#将数据封装到对象
class Func:def __init__(self,name,age):self.name=nameself.age=age
f1=Func("daidai",39)
f2=Func("root",23)
print(f1.name)

将同一类的函数封装到类的方法中

class Send:def weixin(self):passdef dingding(self):passdef mess(self):pass
class Excel:def open(self):passdef read(self):passdef write(self):passdef close(self):pass

继承

class Send:def weixin(self):print("微信")
​
class Son(Send):def dingding(self):print("顶顶")
obj1=Son()
obj1.dingding()
obj1.weixin()
​
class Base:def weixin(self):print("father.微信")#次数的self等于obj1,Son,等于Son.dingding(),所以结果为son.顶顶(最后一行输出结果)self.dingding()def dingding(self):print("father.顶顶")
class Son(Base):def dingding(self):print("son.顶顶")
obj1=Son()
obj1.dingding()
obj1.weixin()
#son.顶顶
#father.微信
#son.顶顶
class Base:def weixin(self):print("father.微信")#此处的self为obj1,为Base(),等于Base.dingding(),所以此处为Base.dingding(),结果为faher.顶顶self.dingding()def dingding(self):print("father.顶顶")
class Son(Base):def dingding(self):print("son.顶顶")
obj1=Base()
obj1.dingding()
obj1.weixin()
#father.顶顶
#father.微信
#father.顶顶
class Base1:
​def dingding(self):print("aaa")
class Base2:def dingding(self):print("bbb")
class Son(Base1,Base2):def a(self):print("ccc")
obj=Son()
obj.dingding()
#aaa

多态

#python中默认可以传递任何类型
def func(data):print(data)
obj=func(1123)
obj1=func("1123")
obj2=func(['sd','ad','d'])

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

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

相关文章

基础 | 并发编程 - [线程状态]

INDEX 操作系统的线程状态 NEW&#xff1a;刚 newREDAY&#xff1a;刚 start()RUNNING&#xff1a;刚 run()BLOCKING&#xff1a;cpu 不能给此线程分配时间片TERMINATED&#xff1a;停止 JAVA 中的线程状态 NEW&#xff1a;刚 newRUNNING&#xff1a;刚 run()BLOCKING&#…

TYPE C模拟耳机POP音产生缘由

关于耳机插拔的POP音问题&#xff0c;小白在之前的文章中讲述过关于3.5mm耳机的POP音产生原因。其实这类插拔问题的POP音不仅仅存在于3.5mm耳机&#xff0c;就连现在主流的Type C模拟耳机的插拔也存在此问题&#xff0c;今天小白就来讲一讲这类耳机产生POP音的缘由。 耳机左右…

vue从零到一创建项目?

创建一个Vue项目通常需要经过以下步骤&#xff0c;从零开始构建一个基本的Vue项目&#xff1a; 步骤一&#xff1a;安装Node.js和npm 下载安装Node.js&#xff1a; 在Node.js官网下载适合你操作系统的Node.js安装包&#xff0c;并按照提示进行安装。安装完Node.js后&#xff…

Amazon Kinesis Analytics

现在让我们将注意力集中在 Amazon Kinesis Analytics 上。 Amazon Kinesis Analytics 使您能够快速编写 SQL 代码&#xff0c;以近乎实时的方式连续读取、处理和存储数据。 借助 Amazon Kinesis Analytics&#xff0c;您可以实时摄取数十亿个小数据点。 然后可以聚合每个单独…

两个笔记本如何将一个笔记本作为另一个笔记本的拓展屏

需求是有两个笔记本&#xff0c;一个笔记本闲置&#xff0c;另一个笔记本是主力本。想将另一个闲置的笔记本连接到主力本上作为拓展屏使用。网上搜了好久&#xff0c;有一些人提到了&#xff0c;也有一些视频但是文章比较少。简单总结一下吧 上述需求有两种方式 第一种&#x…

浅谈Redis 的 保护模式(protected-mode)

今天在一台服务器上面部署了redis,发现始终无法用工具远程连接,项目里面是正常的,就是工具不行,防火墙也关闭了.折腾了一会才突然想起来,是不是触发了保护模式. 什么时候触发保护模式protected-mode: 同时满足以下两个: 1.bind未指定ip 2.未配置密码 解决方案: 编辑redis…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通标志识别系统详解(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客详细介绍了利用深度学习构建交通标志识别系统的过程&#xff0c;并提供了完整的实现代码。该系统采用了先进的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了性能评估对比&#xff0c;分析了性能指标如mAP、F1 Score等。文章深入探…

计算机组成原理实验报告1 | 实验1.1 运算器实验(键盘方式)

本文整理自博主大学本科《计算机组成原理》课程自己完成的实验报告。 —— *实验环境为学校机房实验箱。 目录 一、实验目的 二、实验内容 三、实验步骤及实验结果 Ⅰ、单片机键盘操作方式实验 1、实验连线&#xff08;键盘实验&#xff09; 2、实验过程 四、实验结果的…

代码随想录-java-栈与队列总结

栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。栈是一种线性表&#xff0c;限定这种线性表只能在某一端进行插入和删除操作。进行操作的这一端称为栈顶。 队列&#xff08;Queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另…

Python使用FastAPI提供图片缩略图生成接口

使用pillow的thumbnail生成缩略图时&#xff0c;会保持原图的宽高比&#xff1b;使用的opencv的resize则不会 具体代码如下&#xff1a; #!/usr/bin/env python import re import sys from enum import Enum from io import BytesIO from pathlib import Path from typing im…

汇编课设——秒表2

1. 设计要求 基于 51 开发板,利用键盘作为按键输入,将数码管作为显示输出,实现电子秒表。 功能要求: (1)计时精度达到百分之一秒; (2)能按键记录下5次时间并通过按键回看 (3)设置时间,实现倒计时,时间到,数码管闪烁 10 次,并激发蜂鸣器,可通过按键解除。 2. 设计思…

P1955 [NOI2015] 程序自动分析题解

题目 在实现程序自动分析的过程中&#xff0c;常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本&#xff1a;假设x1​,x2​,x3​,⋯ 代表程序中出现的变量&#xff0c;给定n个形如xi​xj​或xi​!xj​ 的变量相等/不等的约束条件&#xff0c;请判…

美国欲在菲律宾扩大半导体芯片投资

近年来&#xff0c;在复杂的国际形势和保障供应链安全需求的影响下&#xff0c;东南亚国家如新加坡、马来西亚和越南已经成为众多半导体巨头设立海外业务的重要选址地。现在&#xff0c;菲律宾也有望加入这些国家的行列。 最近&#xff0c;美国商务部长吉娜雷蒙多表示希望帮助…

思科网络中如何进行动态NAT配置

一、什么是动态NAT&#xff1f;动态NAT与静态NAT的区别是什么&#xff1f; &#xff08;1&#xff09;动态NAT&#xff08;Network Address Translation&#xff09;是一种网络地址转换技术&#xff0c;它会动态地将内部私有网络中的局域网IP地址映射为公共IP地址&#xff0c;…

Hack The Box-Codify

目录 信息收集 rustscan nmap dirsearch WEB 提权 get user get root 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -b 2250 10.10.11.239 --range0-65535 --ulimit4500 -- -A -sC .----. .-. .-. .----..---. .----. .---. .--. .-. …

JVM 类的加载篇

我们都知道一个类从加载到卸载一共分为七个过程 加载 - 链接(验证 - 准备 - 解析) - 初始化 - 使用 - 卸载 下文我们将详细解析这些过程 谁需要加载? 在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预定义,引用数据类型则需要类的加载 1.加载/装载(loa…

Docker入门二(应用部署、迁移与备份)

文章目录 一、应用部署1.MySQL部署2.Redis部署3.Nginx部署 二、迁移与备份1.容器做成镜像2.把镜像被分成压缩包 一、应用部署 1.MySQL部署 在dokcer中部署mysql&#xff0c;以后不需要在宿主机上装mysql1.做端口映射docker run -id --namemysql5.7 -p 3306:3306 -e MYSQL_ROOT…

Fundamentals of Amazon MSK (Amazon Managed Streaming for kafka)

Amazon Managed Streaming for Apache Kafka 或 Amazon MSK 允许您在 AWS 中运行利用 Apache Kafka 的应用程序。 Kafka 提供了一个流处理平台&#xff0c;并作为基于发布者/订阅者的持久消息传递系统运行。 其主要功能是能够以极高的容错能力获取数据&#xff0c;允许这些记录…

网工内推 | 国企、上市公司网工、运维,CCNA即可,补贴福利多

01 深圳新思 招聘岗位&#xff1a;网络工程师&#xff08;中电集团&#xff09; 职责描述&#xff1a; 1&#xff1a;负责办公室电脑的桌面运维&#xff0c;主要是windows维护与应用维护&#xff1b; 2&#xff1a;负责办公室网络设备配置&#xff0c;如防火墙&#xff0c;交换…

CMake 编译 raylib 程序

CMakeLists.txt 内容如下&#xff1a; cmake_minimum_required(VERSION 3.0) project(t001) # 搜索指定目录下源文件 file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) # 包含头文件路径 include_directories(F:/vclib/raylib-5.0_win64_mingw-w64/include) # 包含静态…