Python—类class复习
Python——类(class)复习
根据类来创建对象的方法被称为实例化
因此学会使用类(class)来进行编程就是初步进入面向对象编程的大门
1.1 创建和使用类
首先编写一个小狗的简单类Dog,它表示的不是特定的小狗,而是任何小狗。
在Dog类中将包含:小狗的名字和年龄;小狗的蹲下和打滚
编写完这个类之后,将使用它来创建表示特定小狗的实例
程序名称:dog.py
class Dog():# 根据约定,在python中,首字母大写的名称指的是类,类定义中的括号Dog()是空的,因我要从空白创建这个类"""一次模拟小狗的简单尝试"""def __init__(self, name, age):# 方法__init__():类中的函数称为方法,这个是一个特殊的方法,是一种约定,旨在避免Python默认方法与普通方法发生名称冲突# 包括三个形参:self、name、age,形参self必不可少,而且必须位于其他形参前面"""初始化属性name和age"""# 以self为前缀的变量都可供类中的所有方法使用,还可以通过类的任何实例来访问这些变量。# self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例self.name = nameself.age = agedef sit(self):"""模拟小狗被命令时蹲下"""print(self.name.title() + " is sitting")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over")
方法__init__()
:
**类中的函数被称为方法。**方法_init_()是一种特殊的方法,每当根据Dog类创建新实例时,Python都会自动运行它。
将方法__init__()
定义成了包含三个形参:self、name和age。其中形参self必不可少,还必须位于其它形参的前面。每当我们根据Dog类创建实例时,都只需给最 后两个形参(name和age)提供值。
以self
为前缀的变量都可供类中所有方法使用,我们还可以通过类的任何实例来访问这些变量。
self.name = name
获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。
像name和age这样可以通过实例访问的变量被称为属性
同时,Dog类还定义了两个方法:sit()
和roll_over()
。由于这些方法不需要额外的信息,如名字或年龄,因此它们只有一个形参self。我们后面将创建的实例能够访问这些方法。
总结:
创建一个表示特定小狗的实例:
class Dog():# 根据约定,在python中,首字母大写的名称指的是类"""一次模拟小狗的简单尝试"""def __init__(self, name, age):"""初始化属性name和age"""self.name = nameself.age = agedef sit(self):"""模拟小狗被命令时蹲下"""print(self.name.title() + " is sitting")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over")my_dog = Dog('while', 6)
print("My dog is", my_dog.name.title()+".")
代码my_dog = Dog('while', 6)
创建了一个名字为while,年龄为6的小狗。
遇到这行代码时,Python使用实参’willie’和6调用Dog类中的方法__init__()
。 方法__init__()
创建一个表示特定小狗的实例,并使用我们提供的值来设置属性name和age。我们将这个实例存储在变量my_dog中。
访问属性:要访问实例的属性,可使用句点表示法,即my_dog.name
调用方法:根据Dog类创建实例后,就可以使用句点表示法来调用Dog类中定义的任何方法。下面来让小狗蹲下和打滚
class Dog():# 根据约定,在python中,首字母大写的名称指的是类"""一次模拟小狗的简单尝试"""def __init__(self, name, age):"""初始化属性name和age"""self.name = nameself.age = agedef sit(self):"""模拟小狗被命令时蹲下"""print(self.name.title() + " is sitting")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over")my_dog = Dog('while', 6)
print("My dog is", my_dog.name.title()+".")
#调用方法
my_dog.sit()
my_dog.roll_over()
创建多个实例:
可按需求根据类创建任意数量的实例。
class Dog():# 根据约定,在python中,首字母大写的名称指的是类"""一次模拟小狗的简单尝试"""def __init__(self, name, age):"""初始化属性name和age"""self.name = nameself.age = agedef sit(self):"""模拟小狗被命令时蹲下"""print(self.name.title() + " is sitting")def roll_over(self):"""模拟小狗被命令时打滚"""print(self.name.title() + " rolled over")my_dog = Dog('while', 6)
your_dog = Dog('lucy', 7)
print("My dog is", my_dog.name.title()+".")
print("Your dog is", your_dog.name.title()+".")
#调用方法
my_dog.sit()
my_dog.roll_over()your_dog.sit()
your_dog.roll_over()
9.2 使用类和实例
类编写好后,大部分时间都将花在使用根据类创建的实例上。需要执行的一个重要任务是修改实例的属性。可以直接修改实例的属性, 也可以编写方法以特定的方式进行修改。
下面编写一个表示汽车的类,它存储了有关汽车的信息,还有一个汇总这些信息的方法:
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yeardef get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()# 创建实例
my_new_car = Car('Audi', 'A4', '2019')
# 调用方法
print(my_new_car.get_descript())
下面,我们添加一个随着时间变化的属性,用来存储汽车的总里程
类中每个属性都必须有初始值,哪怕这个值是0或空字符串。也就是代码中的:
self.make = makeself.model = modelself.year = year
下面来添加一个名为odometer_reading
的属性,其初始值总是为0。我们还添加了一个名为 read_odometer()
的方法,用于读取汽车的里程表:
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")# 创建实例
my_new_car = Car('Audi', 'A4', '2019')
print(my_new_car.get_descript())
my_new_car.read_odometer()
下面来添加一个修改该属性的值的途径
可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)。下面依次介绍这些方法。
直接通过实例进行修改:
利用句点表示法
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")# 创建实例
my_new_car = Car('Audi', 'A4', '2019')
print(my_new_car.get_descript())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
通过方法进行设置:
编写一个update_odometer()
的方法:
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值"""self.odometer_reading += mileage# 创建实例
my_new_car = Car('Audi', 'A4', '2019')
print(my_new_car.get_descript())
my_new_car.update_odometer(500)
my_new_car.read_odometer()
可对方法update_odometer()
进行扩展,使其在修改里程表读数时做些额外的工作。下面来添加一些逻辑,禁止任何人将里程表读数往回调
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")# 创建实例
my_new_car = Car('Audi', 'A4', '2019')
print(my_new_car.get_descript())
my_new_car.update_odometer(500)
my_new_car.read_odometer()
通过方法对属性的值进行递增 :
有时候需要将属性值递增特定的量,而不是将其设置为全新的值。
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")def increment_odometer(self, miles):"""将里程表读数增加指定量"""self.odometer_reading += miles# 创建实例
my_new_car = Car('Audi', 'A4', '2019')
print(my_new_car.get_descript())
my_new_car.update_odometer(500)
my_new_car.read_odometer()my_new_car.increment_odometer(1000)
my_new_car.read_odometer()
9.3 继承
编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承。
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类, 而新类称为子类。
子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。为此,子类的方法__init__()
需要父类施以援手。
例如,下面来模拟电动汽车。电动汽车是一种特殊的汽车,因此我们可以在前面创建的Car 类的基础上创建新类ElectricCar,这样我们就只需为电动汽车特有的属性和行为编写代码。
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")def increment_odometer(self, miles):"""将里程表读数增加指定量"""self.odometer_reading += milesclass ElectricCar(Car):"""电动车的独到之处"""def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)my_tesla = ElectricCar('Tesla', 'model_s', 2021)
print(my_tesla.get_descript())
创建子类时,父类必须包含在当前文件中,且位于子类前面。
在定义子类时,必须在括号内指定父类的名称。
并且在子类的方法__init__()
接受创建父类实例所需的信息
super()
是一个特殊函数,帮助Python将父类和子类关联起来。
这行代码让Python调用 ElectricCar的父类的方法__init__()
,让ElectricCar实例包含父类的所有属性。父类也称为超类(superclass),名称super因此而得名。
给子类定义属性和方法:
让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")def increment_odometer(self, miles):"""将里程表读数增加指定量"""self.odometer_reading += milesclass ElectricCar(Car):"""电动车的独到之处"""def __init__(self, make, model, year):"""初始化父类的属性,再初始化电动汽车特有的属性"""super().__init__(make, model, year)self.battery_size=70;def describe_battery(self):"""打印一条描述电瓶容量的消息"""print("This car has " + str(self.battery_size) + "-kWh battery.")my_tesla = ElectricCar('Tesla', 'model_s', 2021)
print(my_tesla.get_descript())
my_tesla.describe_battery()
重写父类的方法:
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。
为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
将实例用作属性:
可以将类的一部分作为一个独立的类提取出来。可以将大型类拆分成多个协同工作的小类。
例如:可将这些属性和方法提取出来,放到另一个名为Battery的 类中,并将一个Battery实例用作ElectricCar类的一个属性:
class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")def increment_odometer(self, miles):"""将里程表读数增加指定量"""self.odometer_reading += milesclass Battery():"""一次模拟电动车电瓶的简单尝试定义了一个名为Battery的新类,它没有继承任何类。"""def __init__(self, battery_size=70):"""初始化电瓶的属性"""self.battery_size = battery_sizedef describe_battery(self):"""打印一条描述电瓶容量的消息"""print("This car has " + str(self.battery_size) + "-kWh battery.")class ElectricCar(Car):"""电动车的独到之处"""def __init__(self, make, model, year):"""初始化父类的属性,再初始化电动汽车特有的属性"""super().__init__(make, model, year)# 在ElectricCar类中,添加了一个名为self.battery的属性# 意义:这看似做了很多额外的工作,但现在我们想多详细地描述电瓶都可以,且不会导致ElectricCar类混乱不堪。self.battery = Battery()my_tesla = ElectricCar('Tesla', 'model_s', 2021)
print(my_tesla.get_descript())
my_tesla.battery.describe_battery()
9.4 导入类
模块化car.py,其中只包含Car类的代码:
文件:car.py
"""一个可用于表示汽车的类"""class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")def increment_odometer(self, miles):"""将里程表读数增加指定量"""self.odometer_reading += miles
之后,创建另一个文件my_car.py,在其中导入car类并且创建其实例:
文件:my_car.py
from car import Carmy_car = Car('audi', 'a4', 2016)
print(my_car.get_descript())my_car.odometer_reading = 23
my_car.read_odometer()
可根据需要在一个模块中存储任意数量的类。
文件:car.py
"""一个可用于表示燃油车和电动车的类"""class Car():"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descript(self):"""返回整洁的描述性信息"""long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):"""打印一条指出汽车里程的消息"""print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):"""将里程表读数设定为指定值禁止将里程表回调"""if mileage >= self.odometer_reading:self.odometer_reading += mileageelse:print("You can't roll back odometer")def increment_odometer(self, miles):"""将里程表读数增加指定量"""self.odometer_reading += milesclass Battery():"""一次模拟电动汽车电瓶的简单尝试"""def __init__(self, battery_size=60):"""初始化电瓶的属性"""self.battery_size = battery_sizedef describe_battery(self):"""打印一条描述电瓶容量的消息"""print("This car has a " + str(self.battery_size) + "-kWh battery.")def get_range(self):"""打印一条描述电瓶续航里程的消息"""if self.battery_size == 70:range = 240elif self.battery_size == 85:range = 270else:range = 200message = "This car can go approximately " + str(range)message += " miles on a full charge."print(message)class ElectricCar(Car):"""模拟电动汽车的独特之处"""def __init__(self, make, model, year):"""初始化父类的属性,再初始化电动汽车特有的属性"""super().__init__(make, model, year)self.battery = Battery()
文件:my_electric_car.py
from car import ElectricCarmy_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descript())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
最后,还可以进行在一个模块中导入多个类、导入整个模块、导入模块中的所有类等等操作
相关文章:
Python—类class复习
Python——类(class)复习 根据类来创建对象的方法被称为实例化 因此学会使用类(class)来进行编程就是初步进入面向对象编程的大门 1.1 创建和使用类 首先编写一个小狗的简单类Dog,它表示的不是特定的小狗ÿ…...
QT | 信号与槽(超详解)
前言 对qt信号和槽的详细解释 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大家点赞&am…...
Codecraft-17 and Codeforces Round 391 E. Bash Plays with Functions 积性函数
题目链接 题目大意 定义函数 f r ( n ) f_r(n) fr(n) : 在 r 0 r0 r0时,为满足 p p p ⋅ \cdot ⋅ q n qn qn , 且 g c d ( p , q ) 1 gcd(p,q)1 gcd(p,q)1 的有序对 ( p , q ) (p,q) (p,q) 个数;在 r r r ≥ \geq ≥ 1 1 1时࿰…...
粉尘环境下的智能生产革命 ——助力矿山行业实现高效自动化作业
在矿山开采领域,运输系统是保障生产连续性的核心环节。然而,粉尘弥漫、环境恶劣、设备分散等问题,长期制约着矿山运输的效率与安全性。传统的集中式控制系统难以适应复杂工况,而远程分布式 IO 模块与 PLC 的深度融合,正…...
更新vscode ,将c++11更新到c++20
要在CentOS系统中安装最新版本的GCC,你可以使用SCL(Software Collections)仓库,它提供了开发工具的最新版本。以下是安装步骤: 1、 添加SCL仓库: 首先,添加CentOS的SCL仓库,该仓库…...
Numpy实训:读取并分析iris数据集中鸢尾花的相关数据
实训中相关数据集,请联系博主邮箱"1438077481qq.com",在邮箱内发送"iris.csv"即可快速获取,无任何套路,秉承开源精神! 1、导入模块 #导入模块 import numpy as np import csv 2、获取数据 iri…...
nats jetstream server code 分析
对象和缩写 jetstream导入两个对象:stream and consumer,在stream 之上构造jetstreamapi。在nats代码中,以下是一些常见的缩写 1.mset is stream 2.jsX is something of jetstream 3.o is consumer 代码分析 对于producer ,发送…...
德鲁伊连接池
德鲁伊连接池(Druid Connection Pool)是一个开源的Java数据库连接池项目,用于提高数据库连接的性能和可靠性。德鲁伊连接池通过复用数据库连接、定时验证连接的可用性、自动回收空闲连接等机制,有效减少了数据库连接的创建和销毁开…...
Python从入门到精通1:FastAPI
引言 在现代 Web 开发中,API 是前后端分离架构的核心。FastAPI 凭借其高性能、简洁的语法和自动文档生成功能,成为 Python 开发者的首选框架。本文将从零开始,详细讲解 FastAPI 的核心概念、安装配置、路由设计、请求处理以及实际应用案例&a…...
C语言经典案例-菜鸟经典案例
1.输入某年某月某日,判断这一天是这一年的第几天? //输入某年某月某日,判断这一天是这一年的第几天? #include <stdio.h>int isLeapYear(int year) {// 闰年的判断规则:能被4整除且(不能被100整除或…...
SpringBoot过滤器(Filter)的使用:Filter接口、FilterRegistrationBean类配置、@WebFilter注释
1、过滤器(Filter)的介绍 Spring Boot 的过滤器用于对数据进行过滤处理。通过 Spring Boot 的过滤器,程序开发人员不仅可以对用户通过 URL 地址发送的请求进行过滤处理(例如:过滤一些错误的请求或者请求中的敏感词等),而且可以对服务器返回的数据进行过滤处理(例如:压…...
采用内存局部性分配有什么好处?
内存分配时的局部性分配(Locality of Allocation)是指将相关的内存对象分配在相邻或相近的内存区域中。这种分配策略在现代计算机系统中具有显著的好处,主要体现在以下几个方面: 1. 提高缓存命中率 现代计算机系统依赖于多级缓存…...
一周热点-OpenAI 推出了 GPT-4.5,这可能是其最后一个非推理模型
在人工智能领域,大型语言模型一直是研究的热点。OpenAI 的 GPT 系列模型在自然语言处理方面取得了显著成就。GPT-4.5 是 OpenAI 在这一领域的又一力作,它在多个方面进行了升级和优化。 1 新模型的出现 GPT-4.5 目前作为研究预览版发布。与 OpenAI 最近的 o1 和 o3 模型不同,…...
分布式ETCD面试题及参考答案
目录 ETCD 适用的六大场景及其实现原理 ETCD 与 Redis 在分布式锁实现上的差异 解释 ETCD 的 Watch 机制及其应用场景 ETCD 如何实现服务发现?与 ZooKeeper 有何不同? ETCD 实现服务发现的方式 与 ZooKeeper 的不同 ETCD 的键值存储模型支持哪些操作? 为什么 ETCD 适…...
MySQL进阶-关联查询优化
采用左外连接 下面开始 EXPLAIN 分析 EXPLAIN SELECT SQL_NO_CACHE * FROM type LEFT JOIN book ON type.card book.card; 结论:type 有All ,代表着全表扫描,效率较差 添加索引优化 ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】࿰…...
ESP32驱动OV3660摄像头实现EdgeImpulse图像识别(摄像头支持红外夜视、边缘AI计算)
目录 1、传感器特性 2、硬件原理图 3、驱动程序 ESP32-S3 AI智能摄像头模块是一款专为智能家居和物联网应用打造的高性能边缘AI开发模组。它集成了摄像头、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化AI推理。 凭借TensorFlow Lite、YOLO和O…...
SpringSecurity认证授权完整流程
SpringSecurity认证流程:loadUserByUsername()方法内部实现。 实现步骤: 构建一个自定义的service接口,实现SpringSecurity的UserDetailService接口。建一个service实现类,实现此loadUserByUsername方法。…...
java_了解反射机制
目录 1. 定义 2. 用途 3. 反射基本信息 4. 反射相关的类 4.1 class类(反射机制的起源) 4.1.1 Class类中的相关方法(方法的具体使用在后面的示例中) 4.2 反射的示例 4.2.1 获得Class对象的三种方式 4.2.2 反射的使用 Fiel…...
【赵渝强老师】管理MongoDB的运行
MongoDB提供了mongod命令用于启动MongoDB服务器端;而停止MongoDB服务器却可以通过几种不同的方式完成。下面分别进行介绍。 一、【实战】启动MongoDB服务器 通过执行下面的语句可以查看启动MongoDB服务器的帮助信息: mongod --help# 输出的信息如下&a…...
【学习思维模型】
学习思维模型 一、理解类模型二、记忆类模型三、解决问题类模型四、结构化学习模型五、效率与习惯类模型六、高阶思维模型七、实践建议八、新增学习思维模型**1. 波利亚问题解决四步法****2. 主动回忆(Active Recall)****3. 鱼骨图(因果图/Ishikawa Diagram)****4. MECE原则…...
阿里发布新开源视频生成模型Wan-Video,支持文生图和图生图,最低6G就能跑,ComFyUI可用!
Wan-Video 模型介绍:包括 Wan-Video-1.3B-T2V 和 Wan-Video-14B-T2V 两个版本,分别支持文本到视频(T2V)和图像到视频(I2V)生成。14B 版本需要更高的 VRAM 配置。 Wan2.1 是一套全面开放的视频基础模型&…...
安孚科技携手政府产业基金、高能时代发力固态电池,开辟南孚电池发展新赛道
安孚科技出手,发力固态电池。 3月7日晚间,安孚科技(603031.SH)发布公告称,公司控股子公司南孚电池拟与南平市绿色产业投资基金有限公司(下称“南平绿色产业基金”)、高能时代(广东横…...
moodle 开源的在线学习管理系统(LMS)部署
一、Moodle 简介 Moodle(Modular Object-Oriented Dynamic Learning Environment)是一个开源的在线学习管理系统(LMS),广泛应用于教育机构和企业培训。其核心功能包括课程管理、作业提交、在线测试、论坛互动和成绩跟…...
设备树的概念
可以理解为设备树的树干是系统总线,树枝上面是其他的不同的通信协议线。对于不同通信协议的设备挂载在对应的节点即可 在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。 引入了设…...
【ArcGIS】地理坐标系
文章目录 一、坐标系理论体系深度解析1.1 地球形态的数学表达演进史1.1.1 地球曲率的认知变化1.1.2 参考椭球体参数对比表 1.2 地理坐标系的三维密码1.2.1 经纬度的本质1.2.2 大地基准面(Datum)的奥秘 1.3 投影坐标系:平面世界的诞生1.3.1 投…...
MATLAB控制函数测试要点剖析
一、功能准确性检验 基础功能核验 针对常用控制函数,像用于传递函数建模的 tf 、构建状态空间模型的 ss ,以及开展阶跃响应分析的 step 等,必须确认其能精准执行基础操作。以 tf 函数为例,在输入分子与分母系数后,理…...
如何让一个类作为可调用对象被thread调用?
如何让一个类作为可调用对象,被 std::thread 调用 在 C 中,可以让一个类对象作为可调用对象(Callable Object),然后用 std::thread 进行调用。要实现这一点,主要有三种方法: 重载 operator()&…...
OpenWrt 串口终端常用命令---拓展篇
以下进一步拓展 OpenWrt 串口终端常用命令,新增更多高级操作与场景化工具,助你深入掌握系统管理与调试技巧: 一、系统信息与状态查询(扩展) 硬件详细探测 cat /proc/mtd # 查看 Flash 分区表(MTD 设备) mtd info # 显示 MTD 分…...
线上接口tp99突然升高如何排查?
当线上接口的 TP99 突然升高时,意味着该接口在 99% 的情况下响应时间变长,这可能会严重影响系统的性能和用户体验。可以按照下面的步骤进行排查。这里我们先说明一下如何计算tp99:监控系统计算 TP99(第 99 百分位数的响应时间&…...
如何借助人工智能AI模型开发一个类似OpenAI Operator的智能体实现电脑自动化操作?
这几天关于Manus的新闻铺天盖地,于是研究了一下AI智能体的实现思路,发现Openai 的OpenAI Operator智能体已经实现了很强的功能,但是每月200美金的价格高不可攀,而Manus的邀请码据说炒到了几万块!就想能不能求助人工智能…...
langchain系列(终)- LangGraph 多智能体详解
目录 一、导读 二、概念原理 1、智能体 2、多智能体 3、智能体弊端 4、多智能体优点 5、多智能体架构 6、交接(Handoffs) 7、架构说明 (1)网络 (2)监督者 (3)监督者&…...
springboot旅游管理系统设计与实现(代码+数据库+LW)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息&a…...
【前端跨域】WebSocket如何实现跨域通信?原理、实践与安全指南
在实时通信场景(如在线聊天、实时数据推送)中,WebSocket因其高效的双向通信能力成为首选技术 然而,当客户端与服务器部署在不同源时,跨域问题同样可能阻碍WebSocket的连接 一、WebSocket与跨域的关系 WebSocket的跨…...
Go红队开发—格式导出
文章目录 输出功能CSV输出CSV 转 结构体结构体 转 CSV端口扫描结果使用CSV格式导出 HTML输出Sqlite输出nmap扫描 JSONmap转json结构体转jsonjson写入文件json编解码json转结构体json转mapjson转string练习:nmap扫描结果导出json格式 输出功能 在我们使用安全工具的…...
Sharp 存在任意文件读取漏洞( DVB-2025-8923)
免责声明 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x01…...
C++数组,链表,二叉树的内存排列是什么样的,结构体占多大内存如何计算,类占多大内存如何计算,空类的空间是多少,为什么?
C数组是连续存储的,C数组元素依次存放在相邻的内存地址之中,并且内存大小相同。 C链表是离散存储的,C链表是由节点构成的,每个节点之中存在节点的值以及指向下一个节点的指针,每个节点是动态分配的。 C二叉树也是离散…...
【vLLM 教程】使用 TPU 安装
vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ vLLM 使用 PyTorch XLA 支持 Google Cloud TPU。 依赖环境 Google Cloud TPU …...
【RAG】基于向量检索的 RAG (BGE示例)
RAG机器人 结构体 文本向量化: 使用 BGE 模型将文档和查询编码为向量。 (BGE 是专为检索任务优化的开源 Embedding 模型,除了本文API调用,也可以通过Hugging Face 本地部署BGE 开源模型) 向量检索: 从数据库中找到与查询相关的文…...
【RAG】RAG 系统的基本搭建流程(ES关键词检索示例)
RAG 系统的基本搭建流程 搭建过程: 文档加载,并按一定条件切割成片段将切割的文本片段灌入检索引擎封装检索接口构建调用流程:Query -> 检索 -> Prompt -> LLM -> 回复 1. 文档的加载与切割 # !pip install --upgrade openai…...
PSIM积累经验
1、三极管的部署报错。 出错信息: 元件: R 名称: R2 Error: The RLC branch R2 is connected to the gate node of the switch Q1. The gate node should be connected to an On-Off Controller output. Refer to the switch Help p…...
C++之vector类(超详解)
这节我们来学习一下,C中一个重要的工具——STL,这是C中自带的一个标准库,我们可以直接调用这个库中的函数或者容器,可以使效率大大提升。这节我们介绍STL中的vector。 文章目录 前言 一、标准库类型vector 二、vector的使用 2.…...
Go学习笔记
<!-- 注意* --> 初始化工程 go mod init GoDemo 结构体,接口 type i struct{} type i interface{} 条件,选择 循环 键值对 make(map[string]int) 切片,集合 make([]int,10) 函数 通道 Channel make(chan int) ch <- v…...
前端杂的学习笔记
什么是nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 Nginx是一款轻量级的Web 服务器/反向代理服务器,处理高并发能力是十分强大的,并且支持热部署,启动简单,可以做到7*24不间断运行 正代和反代 学习nginx&a…...
痉挛性斜颈护理:全方位呵护,重燃生活希望
痉挛性斜颈是一种以颈部肌肉不自主收缩导致头部向一侧扭转或倾斜为特征的疾病。对于痉挛性斜颈患者而言,科学有效的护理能够显著提升其生活质量,辅助病情的改善。 生活护理:在生活环境布置上,要充分考虑患者行动的便利性。确保室内…...
MySQL的安装以及数据库的基本配置
MySQL的安装及配置 MySQL的下载 选择想要安装的版本,点击Download下载 Mysql官网下载地址: https://downloads.mysql.com/archives/installer/ MySQL的安装 选择是自定义安装,所以直接选择“Custom”,点击“Next” …...
WangEditor快速实现版
WangEditor快速实现版 效果 案例代码 后端 package com.diy.springboot.controller;import cn.hutool.core.util.IdUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiImplicitParam; import org.sp…...
LeetCode Hot100刷题——反转链表(迭代+递归)
206.反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 3&#…...
10.2 继承与多态
文章目录 继承多态 继承 继承的作用是代码复用。派生类自动获得基类的除私有成员外的一切。基类描述一般特性,派生类提供更丰富的属性和行为。在构造派生类时,其基类构造函数先被调用,然后是派生类构造函数。在析构时顺序刚好相反。 // 基类…...
java项目之基于ssm的智能训练管理平台(源码+文档)
项目简介 智能训练管理平台实现了以下功能: 系统可以提供信息显示和相应服务,其管理员增删改查课程信息和课程信息资料,审核课程信息预订订单,查看订单评价和评分,通过留言功能回复用户提问。 💕…...
29-验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则…...