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

快乐学Python,Python基础之组织代码「类与对象」

在上一篇文章中,我们了解了函数。这一篇文章我们来了解一下Python中另外一个重要的概念:类与对象。

1、类与对象

(1)类与对象有什么关系?

你可能会奇怪,为什么要叫类与对象呢?是两个不同的东西吗?简单来说,类代表一个类别,而对象则代表类的一个实例。比如我们在变量与数据类型中学习的整型变量为例。

a = 3print(type(a))

输出结果为:

<class 'int'>

我们创建了一个变量 a,并赋值为 3,然后打印了它的类型。可以看到,输出 int,代表整型变量。
细心的你也发现了,输出里面有一个单词 class,它就是类别的意思。难道说?所谓的整型,是一个类?你猜得没错。这里的整型:int,就是一个类。而我们创建的整型变量 a,就是他的一个实例。

我们再举一些生活中的例子:

  • “人”是一个类,小明则是“人”这个类的一个实例,所以小明是一个对象;
  • “打车公司”是一个类,滴滴则是这个类的一个实例对象(也可以隐藏 实例 这个称呼);
  • “酱油”是一个类,海天酱油 则是一个对象;
  • “车”是一个类,奔驰车则是一个对象。

细心的你不难发现,类与对象本质上是抽象与具象的关系,对象在类的基础上进行了适当的具象。所以在某个抽象关系中的对象也可能会成为另一个抽象关系中的类。比如上面奔驰车是车的一个对象,那同样可能存在,奔驰车是一个类,而 S350L 是一个对象。

(2)Python 中的类

理解了类与对象,现在我们来看一下 Python 中的类,我们在开头的例子中提到,类是用来把有联系的数据和函数给组织起来的一种方式。

在类中,数据被称为属性,而函数则被称为方法。每个类都可以有零个或者多个属性,也可以有零个或者多个方法。

类的属性和方法的概念也很适合用来描述现实世界,比如“人”这个类,身高、体重、年龄等就是属性,而走路、吃饭、打球 等动作就是方法。

接下来,我们通过一个例子来演示怎么定义类,怎么使用类。

(3)定义一个“人”的类

现在我们尝试定义一个人的类。需要有年龄、性别、姓名三个属性,并提供两个方法:introduce 方法,打印一句介绍自己的话。get_age 方法,返回当前对象的 age。

# 类的定义环节class Person:def __init__(self):self.name = ""self.age = 0self.gender = ""def introduce(self):print("Hello, 我是" + self.name)print("我今年 " + str(self.age) + " 岁")print("另外, 我是" + self.gender)def get_age(self):return self.age# 使用上面定义的类xm = Person()xm.name = "小明"xm.age = "25"xm.gender = "男生"print(xm.get_age())xm.introduce()

简单说一下上面的代码的主要逻辑:

  • 在定义环节:
    • 定义了一个类:Person(类名首字母用大写),并用 init 函数中初始化了三个属性:name,age,gender。(init 函数,前后都有两个下划线,代表初始化函数。简单来说就是,当我们创建这个类的对象的时候,这个函数会被自动执行,不用你再手动执行一下)
    • 定义了 introduce 方法,会把几个属性的值组合成一段自我介绍,这里我们通过方法参数 self.属性名 的形式来拿到类的属性的值。这种形式叫作**点语法。**点语法的本质就是找点前面的对象拿点后面的属性的值。比如 A.B 代表 A对象的B属性的值。
    • 定义了 get_age 方法,把当前对象的 age 对象的值返回。可以看到,无论是 introduce 方法 还是 get_age 方法,都有一个 self 参数。这是 Python 的语法规定,类的方法的第一个参数都必须是 self。这样方法内部就能通过对 self 使用点语法来获取属性的值。
  • 使用环节
    • 注意从我们使用的类的代码开始,我们这里就没有缩进。因为有缩进就会被认为还是在类的内部,但这里的代码是在外部的,所以不用缩进;
    • 我们创建了一个 Person 对象,存在变量 xm 中,之后逐一给它的属性赋值
    • 打印 xm 对象的 get_age 方法返回的值
    • 调用 xm 对象的 introduce

运行后,输出如下所示:


25Hello, 我是小明我今年 25 岁另外, 我是男生

可以看到,通过类的机制,我们成功地把数据和函数绑定在了一起。比如上面例子的数据:name、age、gender 和函数:get_age、introduce。并且类提供了一种机制(self 参数),能够让类的方法可以访问类的属性。

(4)给属性赋值

回看刚刚的例子,我们创建了 Person 类的对象之后,逐一对他的属性赋值,每一次属性赋值都需要针对 xm 对象使用点语法,比较麻烦,有没有更好的方式呢? 答案是肯定的。
我们稍微改造一下刚才的例子,改造后的代码如下所示:

class Person:def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef introduce(self):print("Hello, 我是" + self.name)print("我今年 " + str(self.age) + " 岁")print("另外, 我是" + self.gender)def get_age(self):return self.agexm = Person("小明", 25, "男生")print(xm.get_age())xm.introduce()

执行之后,输出和刚才是一致的:

25Hello, 我是小明我今年 25 岁另外, 我是男生

不同在哪儿呢?是这里。


现在我们不需要进行逐个属性的赋值,而是在构造对象的阶段就完成了几个属性的初始化。

这其中的奥妙就在 init 方法里,我们给 init 函数加了参数,然后用这些参数直接在 __init__的函数体中给我们的属性赋值。这样直接在创建对象的时候,把对应的值依次放在类名后的括号中,用逗号分隔。就能实现一次性地给属性都赋值,精简了代码。

2、常见的系统类

类和函数一样,类同样也有 Python 的开发者们提前写好提供给我们使用的类,一般称为系统类。上面举的例子都是我们自己实现的类,下面来看一下常用的系统类。

(1)列表(list)

列表相信大家都不陌生,在变量与数据类型文章中已经介绍过,它是 Python 非常常用的数据类型。

这里介绍一下列表的基础使用,代码如下:

# 创建列表a = [90,1,23, 15]# 访问某个元素(下表从 0 开始)print("Third number is ",a[2])# 使用 append 方法添加元素a.append(-1)print("After append: ", a)# 删除某个位置的元素del a[1]print("After delete second number: ", a)# 删除具体某个元素a.remove(15)print("After delete 15:", a)# 排序,默认从小到大a.sort()print("After sort", a)# 逆排序,从大到小a.sort(reverse = True)print("After reverse sort", a)# 求长度print("Length: ", len(a))

上面主要方法都有注释,这里不再展开,你可以结合以下输出和代码,加深理解。重要的是你要知道,如果之后让你做某个事(删除、排序等),你能直接使用 list 类对应的方法。而不需要自己写循环完成。

Third number is  23After append:  [90, 1, 23, 15, -1]After delete second number:  [90, 23, 15, -1]After delete 15: [90, 23, -1]After sort [-1, 23, 90]After reverse sort [90, 23, -1]Length:  3

(2)字符串(string)

字符串我们用的也是非常多的,在之前也介绍过一些基础用法,比如用 + 号来连接两个字符串,这里我们再介绍额外的一些用法。

a = "Hello,this is my home,welcome"# 添加字符a = a + ",pp"print("\nAfter append pp:\n", a)# 删除前 x 个字符,比如 3a = a[3:]print("\nAfter remove first 3 characters:\n", a)# 删除固定内容的字符a = a.replace("my","")print("\nAfter remove 'my':\n", a)# 替换固定内容成另外一个字符串a = a.replace("home", "company")print("\nAfter replace 'home' to 'company':\n",a)# 用某个字符分割字符串,返回一个数组,比如逗号str_list = a.split(",")print("\nList split from string by comma:\n", str_list)

输出:

After append pp:Hello,this is my home,welcome,ppAfter remove first 3 characters:lo,this is my home,welcome,ppAfter remove 'my':lo,this is  home,welcome,ppAfter replace 'home' to 'company':lo,this is  company,welcome,ppList split from string by comma:['lo', 'this is  company', 'welcome', 'pp']

3、字典(dict)

字典和列表、字符串一样,也是 Python 中相对常用的数据类型,同样也是系统类。因为复杂一些,所以在变量与数据类型文章中没有介绍。

字典和列表类似,也是存储多个变量的容器。但与列表不同的是,字典存储的不仅仅只有变量,还有变量之间的映射关系。

我们举个例子,假设我们要存储班级里三位同学的年龄,可以用列表来完成,比如 a = [17, 18, 15], 但如果我们不仅要存储年龄,还得存储这三位同学的名字。那用列表就无能为力了。

简单来说,我们希望存储一个名字-年龄的映射关系。在这个例子上就是要存储这种形式的数据:小明:17,小红:18,小江:15。在 Python 中,这种有对应关系的两个变量我们称之为键值对。比如小明就是 键(key),而 17 就是值(value),一个键会唯一对应到一个值。

这里我们希望存储的就是三个键值对。而字典,就是专门用来存储键值对的容器。

# 创建一个空字典,用 花括号 {}d = {}print("Empty dict:", d)# 用键值对创建字典,键和值中间用冒号隔开,不同的键值对用逗号隔开d = {"xiaoming" : 3.5 , "xiaohong": 4}print("Two key-value pair dict:", d)# 访问字典的元素,和列表一样用中括号,但传入 key,查询 value。比如查询 xiaoming 的年龄print("Xiaoming's company age:", d["xiaoming"])# 添加新的键值对,直接对 key 对应的 value 赋值即可d["xiaogang"] = 5.5print("After append xiaogang:", d)# 删除键值对,类似列表删除,只是中括号内写 key,而不是序号del d["xiaohong"]print("After remove xiaohong:", d)# 修改键值对,同添加一样,直接对某个已有的 key 重新赋值即可d["xiaoming"] = 9.3print("After change xiaoming's value:", d)

输出:

Empty dict: {}Two key-value pair dict: {'xiaoming': 3.5, 'xiaohong': 4}Xiaoming's company age: 3.5After append xiaogang: {'xiaoming': 3.5, 'xiaohong': 4, 'xiaogang': 5.5}After remove xiaohong: {'xiaoming': 3.5, 'xiaogang': 5.5}After change xiaoming's value: {'xiaoming': 9.3, 'xiaogang': 5.5}

3、实战

现在有个任务,记录部门信息,每个部门都需要统计部门名称,员工列表,部门主管等信息。另外,还有两个要求:1、部门员工入职和离职都能方便的更新信息;2、可以方便查看某个部门的汇总信息。

问题分析:

  • 目前我们需要记录的信息都是围绕部门这个实体的,所以我们可以用一个部门的类来记录,部门名称、员工列表和部门主管则都是这个类的属性。
  • 另外的要求是有人员变动的时候方便更新信息,那其实就是部门类需要提供增加人员和减少人员的方法。
  • 最后一个要求是方便查看部门汇总,那其实就是需要一个打印方法,来把部门的属性都打印出来。

我们接下来一步步来实现它。

(1)创建部门类

我们首先创建部门类和它的属性,部门名称和主管姓名,是字符串类型的变量,这两个属性我们通过初始化函数的参数来初始化。而员工列表是一个列表类型,我们先把它初始化成一个空列表。

class Department:def __init__(self, dep_name, boss_name):self.dep_name = dep_nameself.boss_name = boss_nameself.stuff_list = []

(2)实现员工的新增方法

目前员工列表,也就是 stuff_list 属性还是空列表,为了实现往这个列表增加员工的名字,我们需要在部门类增加一个添加员工的方法,我们就命名为 add_stuff。这个方法除了类方法必须带的 self 参数之外,只有一个参数:要添加的员工的姓名。

然后方法里面只需要把这个姓名添加到 stuff_list 即可,添加数据到列表,只需要调用列表对象的 append 方法即可。

class Department:def __init__(self,dep_name, boss_name):self.dep_name = dep_nameself.boss_name = boss_nameself.stuff_list = []# 新增代码def add_stuff(self, name):self.stuff_list.append(name)

(3)实现删除员工的方法

部门会新增员工,比如员工入职,或者调入。也可能会减少员工,比如员工离职,比如转岗去其他部门,所以我们同样需要一个删除员工的方法。

类似添加员工的设计,删除员工的方法同样需要员工姓名的参数,在方法内部调用 stuff_list 对象的 remove 方法来将员工从列表中移除。

class Department:def __init__(self,dep_name, boss_name):self.dep_name = dep_nameself.boss_name = boss_nameself.stuff_list = []def add_stuff(self, name):self.stuff_list.append(name)# 新增代码def remove_stuff(self, name):self.stuff_list.remove(name)

(4)添加打印部门信息的方法

打印部门信息,就是将部门的三个属性直接打印出来,比较简单,这里我们直接实现:

class Department:def __init__(self,dep_name, boss_name):self.dep_name = dep_nameself.boss_name = boss_nameself.stuff_list = []def add_stuff(self, name):self.stuff_list.append(name)def remove_stuff(self, name):self.stuff_list.remove(name)# 打印部门信息def print_dep_info(self):print("部门名称:",self.dep_name);print("主管名称:",self.boss_name);#这里使用上一篇文章中说到的len()函数来计算部门人数print("员工共个:",len(self.stuff_list));print("分别是:",self.stuff_list);

(5)使用部门类

现在,我们的部门类已经开发完毕了,现在让我们来用一用它,看看它是不是好使。

首先是记录部门信息,假设现在先记录2个部门:技术部和财务部。首先要分别创建两个部门的对象:

#创建技术部和财务部
it_dep = Department("技术部","小江");
finance_dep = Department("财务部","小红");#给技术部添加两个员工
it_dep.add_stuff("小江1");
it_dep.add_stuff("小江2");#给财务添加两个员工
finance_dep.add_stuff("小红1");
finance_dep.add_stuff("小红2");
#打印技术部和财务部信息
it_dep.print_dep_info();
finance_dep.print_dep_info();

执行后输出:

部门名称: 技术部
主管名称: 小江
员工共个: 2
分别是: ['小江1', '小江2']
部门名称: 财务部
主管名称: 小红
员工共个: 2
分别是: ['小红1', '小红2']

最后,当有人需要离职时,只需要调用 remove_stuff 方法即可,假设 技术部的小江2决定去创业,要离职,我们需要将他从部门列表中移除。

it_dep.remove_stuff("小江2")it_dep.print_dep_info()

输出

部门: 技术部主管: 小江员工共个:1员工: ['小江1']

可以看到,小江2已经不在员工列表中了。

至此,我们通过类与对象的方法,完成了部门信息统计的任务,并且可以非常方便地处理员工增加和减少的场景。

相关文章:

快乐学Python,Python基础之组织代码「类与对象」

在上一篇文章中&#xff0c;我们了解了函数。这一篇文章我们来了解一下Python中另外一个重要的概念&#xff1a;类与对象。 1、类与对象 &#xff08;1&#xff09;类与对象有什么关系&#xff1f; 你可能会奇怪&#xff0c;为什么要叫类与对象呢&#xff1f;是两个不同的东…...

H5的3D游戏开源框架

在H5的3D游戏框架中&#xff0c;Three.js、Babylon.js和Turbulenz是比较受欢迎的选择。 Three.js是一个广泛应用并且功能强大的JavaScript 3D库&#xff0c;可以创建简单的3D动画到创建交互的3D游戏。 Babylon.js是David Catuhe对3D游戏引擎热爱的结果&#xff0c;是最好的Ja…...

浅谈一些生命周期

vue2生命周期 beforeCreate &#xff1a;实例创建之初 created&#xff1a;组件已经创建完成 beforeMount&#xff1a;组件挂载之前 mounted:组件挂载之后 beforeUpdate&#xff1a;数据发生变化 更新之前 undated&#xff1a;数据发生之后 beforeDestroy &#xff1a;实…...

JavaScript基础(25)_dom查询练习(二)

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>dom查询练习二</title><link rel"stylesheet" href"../browser_default_style/reset.css"><style>form {margi…...

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&…...

一文初步了解slam技术

本文初步介绍slam技术&#xff0c;主要是slam技术的概述&#xff0c;涉及技术原理、应用场景、分类、以及各自优缺点&#xff0c;和slam技术的未来展望。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;slam精进之…...

滑动窗口协议仿真(2024)

1.题目描述 滑动窗口协议以基于分组的数据传输协议为特征&#xff0c;该协议适用于在数据链路层以及传输层中对按 顺序传送分组的可靠性要求较高的环境。在长管道传输过程&#xff08;特别是无线环境&#xff09;中&#xff0c;相应的滑动窗口 协议可实现高效的重传恢复。附录 …...

uniapp上传文件时用到的api是什么?格式是什么?

在UniApp中&#xff0c;你可以使用uni.uploadFile()方法来上传文件。这是一个异步方法&#xff0c;用于将本地资源上传到服务器。 该方法的基本格式如下&#xff1a; uni.uploadFile({url: 上传接口地址,filePath: 要上传的文件路径,name: 后端接收的文件参数名,formData: {/…...

Java面试——框架篇

1、Spring框架中的单例bean是线程安全的吗&#xff1f; 所谓单例就是所有的请求都用一个对象来处理&#xff0c;而多例则指每个请求用一个新的对象来处理。 结论&#xff1a;线程不安全。 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。一…...

GO语言笔记1-安装与hello world

SDK开发工具包下载 Go语言官网地址&#xff1a;golang.org&#xff0c;无法访问Golang中文社区&#xff1a;首页 - Go语言中文网 - Golang中文社区下载地址&#xff1a;Go下载 - Go语言中文网 - Golang中文社区 尽量去下载稳定版本&#xff0c;根据使用系统下载压缩包格式的安装…...

指针传参误区

C语言中指针作为形参传递时&#xff0c;func&#xff08;*a, *b&#xff09; 这种形式的话&#xff0c;是无法通过简单的 ab来修改的&#xff0c;在函数体内a的地址确实被修改成b的地址了&#xff0c;但是当函数执行结束时&#xff0c;a的地址会重新回到原本的地址里面&#xf…...

力扣-42.接雨水

题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组[0,1,0,2…...

LeetCode-移动零(283)

题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 思路&#xff1a; 这里的思路跟以前做过的去重复数字的思路有点像&…...

文件系统与日志分析

一&#xff0c;文件系统 &#xff08;一&#xff09;inode 和block概述 1&#xff0c;文件数据包括元信息与实际数据 2&#xff0c;文件存储在硬盘上&#xff0c;硬盘最小存储单位是“扇区”&#xff0c;每个扇区存储512字节 3&#xff0c;block (块) 连续的八个扇区组成一…...

labview 与三菱FX 小型PLC通信(OPC)

NI OPC服务器与三菱FX3U PLC通讯方法 一、新建通道名称为&#xff1a;MIT 二、选择三菱FX系列 三、确认端口号相关的参数&#xff08;COM端&#xff1a;7.波特率&#xff1a;9600&#xff0c;数据位&#xff1a;7&#xff0c;校验&#xff1a;奇校验&#xff0c;停止位&#xf…...

掌握Linux网络配置:价格亲民,操作简便!

前言 在Linux系统中&#xff0c;网络配置是实现连接、通信和安全的重要一环。无论你是初学者还是有经验的用户&#xff0c;掌握网络配置命令能帮助你轻松管理网络接口、设置IP地址以及查看连接状态。以下是一些关键命令和示例&#xff0c;让你快速掌握网络操作的精髓&#xff…...

郑州大学算法设计与分析实验2

判断题 1 #include<bits/stdc.h> using namespace std;const int N 50; int f[N], n;int main() { // freopen("1.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n;f[1] 1; f[2] 1;for(int i 3; i &l…...

【CMake】1. VSCode 开发环境安装与运行

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 插件 使用 VSCode 开发C项目&#xff0c;安装 CMake 插件 CMakeCMake ToolsCMake Language Support &#xff08;建议&#xff0c;语法提示) 1. 配置 CMake Language Support , Windows 配置 donet 环境 这…...

使用vue3+<script setup>+element-plus中el-table前端切片完成分页效果

<template><div><el-table :data"visibleData" :row-key"row > row.id"><el-table-column prop"name" label"姓名"></el-table-column><el-table-column prop"age" label"年龄&qu…...

vue 中 computed 和 watch 的区别

在Vue中&#xff0c;computed和watch都是用于监听数据的变化&#xff0c;并且根据变化做出相应的反应。 computed是一个计算属性&#xff0c;它会根据依赖的数据的变化自动计算得出一个新的值&#xff0c;并且具有缓存的特性。当依赖的数据发生变化时&#xff0c;computed属性…...

gephi——graphviz插件设置

gephi_graphviz插件设置 以下是我总结出来的一点经验 1. 安装graphviz软件&#xff0c;请见作者其他博客 2. 安装gephi 插件&#xff0c;并激活 3. 运行graphviz布局&#xff0c;会遇到找不到dot问题 问题描述&#xff1a;Graphviz process error X There was an error launc…...

wireshark抓包分析HTTP协议,HTTP协议执行流程,

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取「HTTP协议」的数据包&#…...

Linux第13步_安装“vim编辑器”及应用介绍

学习“磁盘重新分区”后&#xff0c;嵌入式Linux系统环境搭建进入安装“vim编辑器”这个环节。vim编辑器可以用来修改文件&#xff0c;在后期使用中&#xff0c;会经常用到。 1、安装“vim编辑器” 输入“sudo apt-get install vim回车”&#xff0c;就可以执行安装“vim编辑…...

Yapi安装配置(CentOs)

环境要求 nodejs&#xff08;7.6) mongodb&#xff08;2.6&#xff09; git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…...

HCIA-Datacom题库(自己整理分类的)_08_FTP协议【8道题】

一、单选 1.在使用FTP协议升级路由器软件时&#xff0c;传输模式应该选用___ 二进制模式 字节模式 文字模式 流字节模式 解析&#xff1a;二进制模式&#xff1a;在数据连接中传输&#xff0c;不对数据进行任何处理&#xff0c;不需要转换或格式化就可以传输字符。 2.以…...

【开源GPT项目 - 在问】让知识无界,智能触手可及

Chatanywhere: chatAnywhere 在问 | 让知识无界&#xff0c;智能触手可及 项目简介 这是一个免费的在线聊天工具&#xff0c;旨在让用户更方便地享受科技带来的便利。用户可以使用我们的工具来获取答案、寻求建议、进行翻译和计算等等。这是由一位个人开发者创建的&#xff…...

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于Real-ESRGAN的TPU超分模型部署

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 洋洋很棒 李鹏飞 算法工程师 中国-烟台 2155477673qq.com 团队简介 本人从事工业、互联网场景传统图像算法及深度学习算法开发、部署工作。其中端侧算法开发及部署工作5年时间。 摘要 本文是…...

Vue中的组件通信方式及应用场景

在Vue中&#xff0c;组件通信有以下几种方式&#xff1a; Props / $emit&#xff1a;父组件通过给子组件传递props属性&#xff0c;子组件通过$emit事件将数据传递给父组件。适用于父组件向子组件传递数据。 自定义事件&#xff1a;父组件通过$on监听子组件触发的事件&#xf…...

RA8900CE汽车用c总线接口实时时钟模块

汽车用c总线接口实时时钟模块内置调频32.768 kHz晶体单元和DTCXO&#xff0c;高稳定性和电源切换。 接口类型我 2C-Bus接口(400kHz)界面电压范围2.5V ~ 5.5V温度补偿电压范围2.0V至5.5V计时电压范围1.6V ~ 5.5V可选时钟输出(32.768 kHz, 1024 Hz, 1 Hz)各种功能齐全的日历、报…...

屏幕截图--Snagit

Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像&#xff0c;还能获得动态的图像和声音。软件界面干净清爽&#xff0c;功能板块一目了然&#xff0c;为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…...

网站空间数据库/百度站长平台电脑版

今年过年各位一定在微信里抢了不少红包。那么当别人是手气王而你只抢到1分钱的时候&#xff0c;你有没有想过&#xff0c;如果你来实现红包的分配算法&#xff0c;会怎么写&#xff1f; 这里我给一个简单的实现方案。 基本思路就是&#xff0c;有多少个红包&#xff0c;就循环多…...

常平镇仿做网站/吉林seo管理平台

为了对比数据&#xff0c;可使用多窗体 1. &#xff1a;sp [filename] 加文件名称在新窗体打开新文件 否则表示两个窗体是同一个文件 2. ctrl w 箭头 光标移动到指定窗体 3. 移动到某窗体后 按:q 结束窗体...

深圳做网站的好公司/搜索引擎优化大致包含哪些内容或环节

我们将Oracle数据同步到sqlserver时&#xff0c;是先得在sqlserver端建表的。 复杂的字段我们不同步&#xff0c;就仅仅考虑以下四种数据类型。Oracle到SQLServer做的映射&#xff1a;int -> intnumber -> decimal(18,6)number(p,s) -> decimal(p,s)date -> dateti…...

论坛怎么做网站链接/福清seo

...

哈尔滨建设网站公司/网站不收录怎么解决

1.datagridview中UserDeletingRow事件&#xff0c;当删除行时&#xff0c;UserDeletingRow事件不会触发&#xff0c;但选择行时&#xff0c;并且按delete键时&#xff0c;将会触发UserDeletingRow事件。 2.如果自定义复合控件时&#xff0c;当设置了Dock和Anchor属性时&#xf…...

网站实现隶书繁体/网站平台如何推广

一般都不会很容易注意到这个问题&#xff0c;因为ID足够大&#xff0c;我没必要在意这个号码是否过大&#xff0c;但是如果你是在做一个数据量特别大的系统的时候&#xff0c;真的得考虑这些东西了。因为近期一个项目&#xff0c;我负责数据库设计这块&#xff0c;然后就感觉到…...