python——面向对象
一、面向对象编程
1.1 面向过程与面向对象
面向过程和面向对象都是一种编程方式,只不过再设计上有区别。
1.1.1 面向过程pop:
举例:孩子上学
1. 妈妈起床
2. 妈妈洗漱
3. 妈妈做饭
4. 妈妈把孩子叫起来
5. 孩子起床
6. 孩子洗漱
7. 孩子吃饭
8. 妈妈给孩子送学校去
最为典型就是我们的C语言编程。
1》导入各种外部库
2》设计各种全局变量
3》写一个函数
4》写一个函数
5》........
6》写一个main主函数作为程序入口部分
- 面向过程的编程思想将一个功能分解为一个一个小的步骤, 我们通过完成一个一个的小的步骤来完成一个程序
- 这种编程方式,符合我们人类的思维,编写起来相对比较简单
- 但是这种方式编写代码的往往只适用于一个功能, 如果要在实现别的功能,即使功能相差极小,也往往要重新编写代码, 所以它可复用性比较低,并且难于维护
优点:简单直观、性能高效、代码简洁。
缺点:不易维护、不易扩展、代码重用性低。
1.1.2 面向对象oop:
举例:孩子上学
1》妈妈 送 孩子 上学 python、java、C++都是面向对象的编程方式。 以python为例
1》导入各种库
2》设计各种全局变量
3》设计你所需要的类——妈妈类、孩子类
4》main主函数可有可无
- 面向对象的编程思想,将所有的功能统一保存到对应的对象中 比如,妈妈功能保存到妈妈的对象中,孩子的功能保存到孩子对象中 。要使用某个功能,直接找到对应的对象即可
- 这种方式编写的代码,比较容易阅读,并且比较易于维护,容易复用。
- 但是这种方式编写,不太符合常规的思维,编写起来稍微麻烦一点
优点:模块化、安全性高、代码重用性高。
缺点:学习难度大、性能开销大、调试困难。
1.2 类 和 对象
目前我们所学的python中的内置类型都是对象——内置对象,内置对象有时候不能满足我们的需求,需要自定义一些对象。
10, 20, 30, -40, a=10, b=20等等等,都是整数,对其进行抽象——int类。
python 中一切都是对象。
类也是一个对象。
1.2.1 类的定义 与 实例化对象
语法格式1:
class ClassA:# 公共的属性def __init__(self):passdef fun1(self):passdef fun2(self):pass语法格式2:
class ClassA(object):# 公共的属性def __init__(self):passdef fun1(self):passdef fun2(self):pass实例化对象的语法:1》无参对象名 = 类名()2》有参对象名 = 类名(参数列表)
例举
# 设计类
class student:name = Noneage = Nonegander = None
# 创建对象
student1 = student()
# 给对象赋值
student1.name = '小明'
student1.age = 18
student1.gender = '男'
# 获取对象中的信息
print(student1.name,student1.age,student1.gander)
1.2.2 访问属性/方法
使用符号 . 进行访问
# 访问属性
对象名.属性
# 访问方法
对象名.方法名()
1.2.3 对象与类的关系【1】
- 对象拥有类的所有属性和方法
- 对象的属性和方法可以单独添加、删除、修改
- 对象与对象之间的属性和方法不可共享
- 对象不能独自创建,必须依托于类,类可以实例化N个对象
#创建一个闹钟类
class clock:id = Noneprice = Nonedef ring(self):import winsound #python内置模块是让电脑响 winsound.Beep(2000,3000)#频率和时间print(f'电脑编号{self.id},电脑价格{self.price}')
#闹钟1
clock1 = clock()
clock1.id =12344
clock1.price = 19.99
clock1.ring()#闹钟2
clock2 = clock()
clock2.id = 12345
clock2.price = 29.99
clock2.ring()
1.2.3 对象与类的关系【2】
from types import MethodTypeclass student:def __init__(self,name):self.name = namedef fun1(self):print(f'{self.name}会唱歌')s1 = student('刘')
s2 = student('坤哥')s1.fun1()#刘会唱歌
s2.fun1()#坤哥会唱歌def Ctrl(self):print(f'{self.name}会穿背带裤打篮球')s2.Ctrl=MethodType(Ctrl,s2)s2.Ctrl()#坤哥会穿背带裤打篮球
还可以使用以下函数的方式来访问属性:
- getattr(obj, name[, default]) : 访问对象的属性。
- hasattr(obj,name) : 检查是否存在一个属性。
- setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
- delattr(obj, name) : 删除属性。
1.2.5 魔方方法——构造函数 与 析构函数
- __init__ 构造函数:完成对象的初始化工作,方便统一管理、调用类创建对象时,自动执行。
- __del__ 析构函数:删除对象时执行一些操作,自动执行。
- __str__ 打印方法:输出执行信息,自动执行。
class Animal:#构造函数def __init__(self,name,call):self.name = nameself.call = call#打印方法def __str__(self):return f'{self.call},你在{self.name}叫什么'#析构函数def __del__(self):print(f"{self.name}消音成功")dog = Animal('狗','汪汪汪')
cat = Animal('猫','喵喵喵')print(dog)
print(cat)
"""
汪汪汪,你在狗叫什么
喵喵喵,你在猫叫什么
狗消音成功
猫消音成功
"""
1.2.6 类属性/方法 与 实例对象属性/方法 与 静态方法
class Bank(object):"""定义了一个银行卡类,用于初始化、存钱、取钱"""total_money = 0def __init__(self, name, money):self.name = nameBank.total_money += money #改为self.def save(self, money):Bank.total_money += moneydef draw(self, money):Bank.total_money -= moneyb1 = Bank('张三', 1000)
print(b1.total_money)
b1.save(5000)
print(b1.total_money)
b1.draw(3000)
print(b1.total_money)b2 = Bank('李四', 8888)
print(b2.total_money)
b2.save(10000)
print(b2.total_money)
类方法、实例方法、静态方法
class student:#定义一个学生类grade = 'py24101'@classmethoddef clas_fun(cls):"""类方法中只能调用类属性和类方法"""print(cls.grade)def __init__(self,name,age):self.name = nameself.age = agedef fun1(self):"""实例方法中能调用类属性、实例属性"""print(f"实例方法中输出类属性{self.grade}, 输出实例属性{self.name}")@staticmethoddef sta_fun(x):print(f"{x}静态方法一般实现与类和对象无关联的操作,例如:游戏说明书等")s1 = student('小明',18)
#调用类方法
#方法一
student.clas_fun()#py24101
#方法二
s1.clas_fun()#py24101#如何调用实例对象
#方法一
student.fun1(s1)#实例方法中输出类属性py24101, 输出实例属性小明
#方法二
s1.fun1() #实例方法中输出类属性py24101, 输出实例属性小明# 如何调用静态变量
#方法一
student.sta_fun(2)#2静态方法一般实现与类和对象无关联的操作,例如:游戏说明书等
#方法二
s1.sta_fun(2) #2静态方法一般实现与类和对象无关联的操作,例如:游戏说明书等
1.2.7 Python的内置类属性
- __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
- __doc__ :类的文档字符串
- __name__: 类名
- __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
- __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
class Student(object):"""定义一个学生类属性:名字 年龄方法:method_1 method_2"""name = '张三'age = 18def method_1(self):passdef method_2(self):passprint(Student.__dict__)
print(Student.__doc__)
print(Student.__name__)
print(Student.__module__)
print(int.__module__)
print(Student.__bases__)
"""
{'__module__': '__main__', '__doc__': '\n 定义一个学生类\n 属性:名字 年龄\n 方法:method_1 method_2\n ', 'name': '张三', 'age': 18, 'method_1': <function Student.method_1 at 0x0000023EBF1A4AE0>, 'method_2': <function Student.method_2 at 0x0000023EBF1A4C20>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>}定义一个学生类属性:名字 年龄方法:method_1 method_2Student
__main__
builtins
(<class 'object'>,)
"""
1.3 类的封装【私有属性与方法】
封装是类的三大特性之一。
封装指的是隐藏对象中一些不希望让外部所访问的属性或方法。
python中封装其实是通过设置访问权限来体现的,私有属性和私有方法是控制访问权限的组成部分。
1.3.1 私有属性
在类的内部使用,不希望外部直接访问的变量。
在python中,使用双下划线作为前缀来定义私有属性。
私有属性在类外不能访问
class bank:def __init__(self,name,pwd):self.name = nameself.__pwd = pwd# 为了在某些需要的时候,访问到私有属性,所以需要在类内部设置两个接口def get_pwd(self):return self.__pwddef set_pwd(self,newpwd):self.__pwd = newpwduser = bank("小明",'123456')print(user.name)#小明
# print(user.__pwd) 会报错
print(user.get_pwd())#123456
user.set_pwd('456789')
print(user.get_pwd()) #456789
1.3.2 私有方法
和私有属性是一样的。
class Bank(object):"""定义了一个银行卡类属性:name pwd密码【我不希望外部访问】"""def __init__(self, name, pwd):self.name = nameself.__pwd = pwddef __info(self):print(f"名字{self.name}, 密码{self.__pwd}")def get_info(self):self.__info()# Bank.__info() 报错
b1 = Bank('李四', '123456')
# b1.__info() 报错
b1.get_info()
1.3.3 属性装饰器
属性装饰器是实现把方法转为属性的装饰器。
作用:
- 把方法转为属性,便于操作属性
- 实现对属性的更改(验证)、查看、删除
class 类名:
def __init__(self,name):
self.name = name
@property
def 函数名(self):
return self.name
@函数名.setter
def 函数名(self,m)
self.name +=m
class bank:def __init__(self,name ='',money = 0): #可以在里面定义初始值self.name = nameself.__money = money@propertydef my_money(self):return self.__money@my_money.setterdef my_money(self,m):self.__money+=muser = bank('小明',1000)user.my_money = 900
print(user.my_money) #1900
1.4 类的继承
面向对象的编程带来的主要好处之一就是代码的重用,实现这种重用的方法之一就是通过继承机制。
通过继承创建的新类称之为【子类】或者【派生类】,被继承的类称之为【父类】、【基类】、【超类】。
1.4.1 继承语法格式
class 子类名(父类名列表):
pass
class Parent(object):"""定义父类"""par_attr = 100def __init__(self):print("初始化父类")def par_fun1(self):print("父类方法1")def par_fun2(self):print("父类方法2")class Child(Parent):"""定义子类"""child_attr = 666def __init__(self):print("初始化子类")def child_fun1(self):print("子类方法1")c1 = Child()
print(c1.child_attr)
c1.child_fun1()print(c1.par_attr)
c1.par_fun1()
c1.par_fun2()
1.4.2 多继承语法【明白即可,不建议乱用】
如果在继承的元组()里面有一个以上的类,就称之为多继承
class a:pass
class b:pass
class c:pass
class d(a,b,c):passD = d()
print(d.mro())#[<class '__main__.d'>, <class '__main__.a'>, <class '__main__.b'>, <class '__main__.c'>, <class 'object'>] 查顺序
print(d.__bases__) #(<class '__main__.a'>, <class '__main__.b'>, <class '__main__.c'>)查父类
。
1.4.3 继承重写父类方法
如果你的父类方法不能满足你得要求,你可以在之类中重写父类的方法。
# 重写
class Parent(object):def method(self):print(f"{self}的方法")class Child(Parent):def method(self):print("xxxxxxxxxx")print(f"子类重写父类ri{self}的方法")c = Child()
c.method()
这里列出了一些通用的功能,可以在自己的类重写:
__init__ ( self [,args...] )构造函数 | 简单的调用方法: obj = className(args) |
__del__( self ) 析构方法 | 简单的调用方法 : del obj |
__repr__( self ) 转化为供解释器读取的形式 | 简单的调用方法 : repr(obj) |
__str__( self ) 用于将值转化为适于人阅读的形式 | 简单的调用方法 : str(obj) |
__cmp__ ( self, x ) 对象比较 | 简单的调用方法 : cmp(obj, x) |
1.4.4 python继承特点
- 在子类中如果需要父类的构造方法,需要显式调用父类的构造方法,或者不重写父类的构造方法。__init__()
- 在子类中调用父类的方法,需要显式调用,且第一个参数self不能省略
不重写父类构造方法
class father:def __init__(self,x,y):self.x = xself.y = ydef sum(self):print(f'{self.x},{self.y}')class child(father):def fun(self):print(f'{self.x},{self.y}')stu = child(1,2)
stu.fun() #1,2
重写父类构造方法、里面显式调用父类构造方法
class father:def __init__(self,x,y):self.x = xself.y = yclass child(father):def __init__(self,x,y,z):father.__init__(self,x,y)self.z = zdef fun(self):print(self.x,self.y,self.z)
stu = child(1,2,3)
stu.fun() #1,2,3
用super().方法/成员变量
class father:def __init__(self,x,y):self.x = xself.y = yclass child(father):def __init__(self,x,y,z):super().__init__(x,y)self.z = zdef fun(self):print(self.x,self.y,self.z)
stu = child(1,2,3)
stu.fun() #1,2,3
1.4.5 运算符重载
在Python中,并没有像其他语言(如C++)中那样的内置机制来重载运算符。但是,你可以通过定义特定的方法来模拟运算符重载的行为。
以下是一些常见运算符以及它们对应的特殊方法:
加法:+ 对应 __add__
减法:- 对应 __sub__
乘法:* 对应 __mul__
除法:/ 对应 __truediv__
取模:% 对应 __mod__
幂运算:** 对应 __pow__
位运算:
位运算:>> 对应 __rshift__
位运算:& 对应 __and__
位运算:| 对应 __or__
位运算:^ 对应 __xor__
class a:def __init__(self,x):self.x = xdef __add__(self, other):return self.x + other.x
b = a(3)
c = a(4)
print(b+c) #7class d:def __init__(self,x,y):self.x = xself.y = ydef __add__(self, other):return self.x*other.y+self.y*other.xe = d(2,3)
f = d(4,5)
print(e+f)#22
1.5 类的多态
python中的多态也可以通过方法重写进行。
同一个方法,不同对象显式的结果不同
class Animal:def speak(self):pass
class Dog(Animal):def speak(self):print('汪汪汪')
class Cat(Animal):def speak(self):print('喵喵喵')def Animal_speak(animal:Animal):animal.speak()dog = Dog()
cat = Cat()Animal_speak(dog)#汪汪汪
Animal_speak(cat)#喵喵喵
1.创建学生类Person。
2.添加静态方法,showInfo:
(1)显示信息“龙的传人”;
3.添加类属性:country,国籍,默认值为“中国“。
4.添加类属性:nation,民族,默认值为“汉族“。
5.添加构造方法,添加如下对象属性:
(1)name,保存学生姓名,默认值为空字符串。
(2)age,保存学生年龄,默认值为0。
(3)birth,保存出生日期,默认值为空字符串。
(4)money,保存工资收入,私有权限,默认值为0。
6.添加类方法,获取两个类属性的值。
7.添加魔法方法,将所有属性用格式化字符串组合成一个字符串后返回。
(1)格式如下: 国籍:中国 民族:汉 姓名:XXX 年龄:XXX 出生日期:XXX
8.添加setName方法,修改对象属性name。
9.添加getName方法,获得对象属性name的值。
10.添加返回age值的方法getAge,利用属性装饰器修饰该方法,并对age值进行修改。 11.添加setBirth方法,修改对象属性birth。
12.添加getBirth方法,获得对象属性birth的值。
13.添加私有属性money的set和get方法。
14.添加对象方法info,输出当前对象的个人信息:
(1)格式如下:姓名—年龄—出生日期—存款
15.添加主程序入口,完成如下任务:
(1)调用静态方法: ①提示:通过对象调用 ②提示:通过类名调用;
(2)创建一个对象。
(3)修改对象的所有对象属性。
(4)通过对象方法获得对象的所有属性值,并显示。
(5)调用info显示对象信息。
(6)调用对象的打印方法,输出信息;
(7)再次修改所有对象的属性。
(8)再次调用对象的打印方法。
from tkinter.font import namesclass Person:country = '中国'nation = '汉族'@staticmethoddef showInfo():print('龙的传人')def __init__(self,name = '',age = 0,birth = '',money = 0):self.name = nameself.age = ageself.birth = birthself.__money = money@classmethoddef func(cls):print(cls.country,cls.nation)def __str__(self):return f' 国籍:{self.country} \n 民族:{self.nation} \n 姓名:{self.name} \n 年龄:{self.age} \n 出生日期:{self.birth}'def setName(self,name):self.name = namedef getName(self):print(self.name)@propertydef getAge(self):return self.age@getAge.setterdef getAge(self,newage):self.age = newagedef setBirth(self):return self.birthdef getBirth(self,birth):self.birth = birthdef set_money(self):return self.__moneydef get_money(self,money):self.__money = moneydef info(self):print(f'姓名:{self.name} 年龄:{self.age} 出生日期:{self.birth} 存款:{self.__money}')user = Person()
user.showInfo()
user.setName("张三")
user.getAge = 25
user.getBirth('1999-09-30')
user.get_money(20000)
user.info()
print(user)
user.setName('小明')
user.getAge = 19
user.getBirth('2005-07-30')
user.get_money(2000)
print(user)
相关文章:

python——面向对象
一、面向对象编程 1.1 面向过程与面向对象 面向过程和面向对象都是一种编程方式,只不过再设计上有区别。 1.1.1 面向过程pop: 举例:孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃…...

Microsoft 365 Exchange如何设置可信发件IP白名单
1、 进入到 Microsoft 365 admin center 管理中心 ,点击 管理中心 下的 安全 在弹出的新页面中,依次点击 策略和规则 – 威胁策略 – 反垃圾邮件 再单击 连接筛选器策略(默认) – 编辑连接筛选器策略 2、在 IP 允许列表 中添加可信邮件 IP 段࿰…...

LM27313典型电路之升压电路
下图为升压芯片LM27313典型电路图: 从图中可以看出:系统电压VSYS3.7伏,通过C26与C27两个滤波电容后,到达升压芯片的VIN输入脚pin5。 其中电源芯片的电压输出由下式子决定: VOUT1.23*(1R17/R21) 其中VOUT是图中的V5D…...

嵌入式面试八股文(七)·#ifndef#define#endif的作用、以及内存分区(全局区、堆区、栈区、代码区)
目录 1. 头文件中的#ifndef / #define / #endif的作用是什么? 2. 内存分区:全局区、堆区、栈区、代码区简单描述? 2.1 代码区(Text Segment): 2.2 全局区(Data Segment)&…...

【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练
2024-ESWA-Diffusion-based normality pre-training for weakly supervised video anomaly detection 基于扩散的弱监督视频异常检测常态预训练摘要1. 引言2. 相关工作3. 方法论3.1. 使用扩散自动编码器进行常态学习3.2. 全局-局部特征编码器3.2.1 局部块3.2.2 全局块3.2.3 协同…...

Android 13 实现屏幕熄屏一段时候后关闭 Wi-Fi 和清空多任务列表
明白了,您这个补丁的功能是当设备屏幕关闭一段时间后,自动关闭 Wi-Fi 连接并清空多任务菜单。以下是更新后的博客内容,包含了对功能的详细解释和代码实现: 修改 PowerManagerService.java 以实现屏幕灭屏后关闭 Wi-Fi 和清空多任务菜单功能 在本篇博客中,我们将介绍一个针…...

Elasticsearch磁盘占用大于95%时将所有索引置为只读
在一个稳定运行的功能中,突然收到报错。经查明,是在向 Elasticsearch 中插入文档时出现了错误: AuthorizationException: AuthorizationException(403, ucluster_block_exception, ublocked by: [FORBIDDEN/12/index read-only / allow delete (api)];) 网上也有其他人报出类…...

删除 git config 保存的密码
要从 Git 中删除保存的密码,你可以根据你之前使用的保存方法来操作。以下是一些常见的方法来删除 Git 中保存的密码: 删除 credential.helper 中的密码 如果你之前使用 store 或 cache 作为 credential.helper,你可以执行以下步骤来删除保存…...

Springboot环境搭建详解
springboot学习视频记录: 笔记: a:Springboot maven常见依赖、配置文件笔记-CSDN博客 b:Springboot环境搭建详解-CSDN博客 day01 6:springboot的parent和starter依赖- a 7:启动类的位置配置- b 8&am…...

SpringCloud框架学习(第三部分:Resilience4j 与 Micrometer)
目录 九、CircuitBreaker断路器 1.前言(Hystrix) 2.服务雪崩 3.Circuit Breaker 4. Resilience4j 5.案例实战 (1)熔断(服务熔断 服务降级) Ⅰ. 按照 COUNT_BASED(计数的滑动窗口…...

Scala的Map集合(不可变)
package gxy//类型:不可变,可变 //操作:添加元素,删除元素,查询元素,移除元素,遍历 object map {def main(args: Array[String]): Unit {//不可变mapval map1 Map("鄂" -> "…...

深入剖析:Spring MVC与Struts的较量
标题:深入剖析:Spring MVC与Struts的较量 引言 在Java Web开发领域,Spring MVC和Struts是两个非常流行的框架。它们各自拥有不同的特点,适用于不同的应用场景。本文将深入探讨Spring MVC和Struts的区别,从底层机制、…...

4.Mybatis中,在Mapper的SQL映射文件中,使用<choose><when>无法识别参数的情况
正确结果 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.itheima.mapper.Bra…...

antd proFromSelect 懒加载+模糊查询
antd proFromSelect 懒加载模糊查询 场景 查询用户的时候数量特别大,有10w条数据,不可能直接全部查询用来展示 所以本文章将讲解如何使用懒加载模糊查询,解决数量过大的问题 后端代码就不用展示了,很简单的分页查询,主…...

Spring Boot 牛刀小试 org.springframework.boot:spring-boot-maven-plugin:找不到类错误
今天看了下书翻了下Spring Boot的用法,下载idea后, 反复出现org.springframework.boot:spring-boot-maven-plugin:找不到类错误,后来看了下调试窗口,发现是连不上maven的网站443错误,解决思路很简单,把ide连…...

qt中ctrl+鼠标左键无法进入
现象:qt中ctrl鼠标左键无法跳转部分函数,例如能跳到textEdit->toPlainText().,但无法跳转到toUtf8();但编译没有问题 排查1:我发现是交叉编译链的问题,使用linux自带就可以进,用ATK-I.MX6U就部分不能进…...

丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍
丹摩DAMODEL|让AI开发更简单!算力租赁上丹摩! 目录 一、引言 二、丹摩智算平台概述 (一)平台架构 (二)平台特点 三、服务器虚拟化基础 (一)虚拟化的概念 …...

本机ip地址和网络ip地址一样吗
在数字化时代的浪潮中,IP地址作为网络设备身份的象征,扮演着举足轻重的角色。然而,当我们谈论IP地址时,常常会听到“本机IP地址”与“网络IP地址”这两个术语,它们之间是否存在差异?又该如何准确理解并区分…...

websocket身份验证
websocket身份验证 前言 上一集我们就完成了websocket初始化的任务,那么我们完成这个内容之后就应该完成一个任务,当客户端与服务端连接成功之后,客户端应该主动发起一个身份认证的消息。 身份认证proto 我们看一眼proto文件的内容。 我…...

案例解读 | 某三甲医院IT监控体系升级实例
PART 01 项目背景 01客户介绍 案例医院是一家某省省属大型三级甲等综合医院。该医院占地三百余亩,总建筑面积约26万平方米,开放床位1500张,资产总值约15亿元,其规划建设一流,拥有诸多先进配套设施,建设项目…...

Ubuntu20.04 为脚本文件创建桌面快捷方式 ubuntu
Ubuntu20.04 为脚本文件创建桌面快捷方式 在Ubuntu 20.04中,为脚本文件(如 .sh 文件)创建桌面快捷方式是一种提升用户效率的实用方法,允许用户通过图形用户界面直接执行重要或常用的脚本。以下是一种详细、专业且逻辑清晰的通用方…...

LeetCode297.二叉树的序列化和反序列化
题目要求 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序…...

应用程序部署(IIS的相关使用,sql server的相关使用)
数据服务程序(API)部署 1、修改配置文件 打开部署包中的web.config配置文件,确认数据库登录名和密码正确 修改ip为电脑IP(winR输入cmd,输入ipconfig,IPv4对应的就是本机IP) 2、打开IIS&#x…...

小程序源码-模版 100多套小程序(附源码)
一、搭建开发环境 搭建环境可以从这里开始: 微信小程序从零开始开发步骤(一)搭建开发环境 - 简书 二、程序示例 1、AppleMusic https://download.csdn.net/download/m0_54925305/89977187 2、仿B站首页 https://download.csdn.net/downlo…...

UE5运行时创建slate窗口
加入"Slate","SlateCore"模块 Actor.cpp // Fill out your copyright notice in the Description page of Project Settings.#include "MyWindowClass.h"// Sets default values AMyWindowClass::AMyWindowClass() {// Set this actor to call…...

浅谈C#之单线程流式适配器
一、基本介绍 在C#中,单线程流式适配器通常用于处理流式数据,如网络通信或文件操作中的连续数据流。这些数据流可能是有序的,并且数据包之间可能会发生粘连,即没有明确的分界线,导致粘包和半包问题。解决这些问题的关键…...

【更新中】《硬件架构的艺术》笔记(三):处理多个时钟
介绍 单时钟设计更易于实现,也更少出现亚稳态、建立和保持时间违例方面的问题。但在实践中,很少有设计只在一个时钟下运行。 多时钟域 多个始终可以有以下一种或多种时钟关系: 1、时钟频率不同。 2、时钟频率相同,但相位不同…...

【matlab】数据类型01-数值型变量(整数、浮点数、复数、二进制和十六进制)
文章目录 一、 整数1.1 整数的最值1.2 大整数1.3 当整数值超过了uint64最大值1.4 和其它类型数值运算 二、 浮点数2.1 双精度和单精度2.2 浮点数的存储2.3 浮点数的最值2.4 浮点数的“四舍五入”2.5 浮点数的算术运算2.6 意外:舍入误差、抵消、淹没和中间转换 三、复…...

引入第三方jar包部署服务器后找不到jar处理方法
在使用Spring Boot打包为可执行的JAR文件并部署到服务器时,有时会遇到找不到第三方JAR包的问题。这通常是因为服务器上缺少了这些JAR包,或者JAR包的版本不匹配。下面我将介绍两种常见的解决方案:使用Maven安装本地JAR包和使用Maven插件方式。…...

neo4j desktop基本入门
下载安装不在赘述,本文只记述一些neo4j的基本入门操作 连接本地neo4j数据库 1. 点击ADD添加连接 端口一般是7687 账户名和密码忘记了,可以通过neo4j web(默认为neo4jneo4j://localhost:7687/neo4j - Neo4j Browser)重置密码 AL…...