【积累】Python的类
类和方法的概念及实例
类 (Class):类是对具有相同属性和方法的对象集合的抽象描述。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
构造方法 __init__():这是一个特殊的方法,会在类实例化时自动调用。
实例变量:类中用变量表示的属性,这种变量称为实例变量,是用 self
修饰的变量。
实例化:创建一个类的实例,即创建一个类的具体对象。
继承:一个派生类 (derived class) 继承基类 (base class) 的属性和方法。继承允许将派生类对象作为基类对象对待。
为了便于理解,每种类型的示例都包括从简单到复杂的三个示例。
1. Python类:class
Python中的class
相当于一个包含多个函数的集合。如果在AnimalClass
类中有一个方法make_sound
,当我们需要调用它时,必须使用AnimalClass.make_sound
来调用,即在调用时需要带上类名。
简单示例
在这个简单示例中,我们定义了一个名为AnimalClass
的类,它有一个类变量num_legs
和一个方法make_sound
。
# AnimalClass 类
class AnimalClass:"""一个简单的类实例"""num_legs = 4def make_sound(self):return 'generic sound'# 实例化类
animal_instance = AnimalClass()
# 访问类的属性和方法
print("AnimalClass 类的属性 num_legs 为:", animal_instance.num_legs)
print("AnimalClass 类的方法 make_sound 输出为:", animal_instance.make_sound())
中等难度示例
在这个示例中,我们定义了一个名为Car
的类,它有一个构造方法来初始化实例变量brand
和model
,并且有一个方法display_info
来显示车辆信息。
# Car 类
class Car:"""一个简单的类实例"""def __init__(self, brand, model):self.brand = brandself.model = modeldef display_info(self):return f"Car brand: {self.brand}, model: {self.model}"# 实例化类
car_instance = Car("Toyota", "Corolla")
# 访问类的方法
print(car_instance.display_info())
复杂示例
在这个复杂示例中,我们定义了一个名为NeuralNetwork
的类,它继承了nn.Module
,用于构建一个简单的神经网络。
# NeuralNetwork 类
import torch
import torch.nn as nnclass NeuralNetwork(nn.Module):def __init__(self):super(NeuralNetwork, self).__init__()self.layer1 = nn.Linear(10, 50)self.layer2 = nn.Linear(50, 1)def forward(self, x):x = torch.relu(self.layer1(x))x = self.layer2(x)return x# 实例化类
model = NeuralNetwork()
print(model)
2. 类的构造方法 __init__()
构造方法 __init__() 是类与外界的联系方法,当创建类的实例时,会自动调用这个方法。
简单示例
在这个简单示例中,我们定义了一个名为Point
的类,它有一个构造方法来初始化实例变量x_coord
和y_coord
。
class Point:def __init__(self, x, y):self.x_coord = xself.y_coord = yp = Point(2.5, 4.0)
print(p.x_coord, p.y_coord) # 输出结果:2.5 4.0
中等难度示例
在这个示例中,我们定义了一个名为Person
的类,它有一个构造方法来初始化实例变量name
和age
,并且有一个方法greet
来返回一个问候字符串。
class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):return f"Hello, my name is {self.name} and I am {self.age} years old."p = Person("Alice", 30)
print(p.greet())
复杂示例
在这个复杂示例中,我们定义了一个名为Dataset
的类,用于处理数据和标签的集合。它实现了两个特殊方法:__len__
返回数据的长度,__getitem__
返回指定索引的数据和标签。
class Dataset:def __init__(self, data, labels):self.data = dataself.labels = labelsdef __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.labels[idx]data = [torch.randn(10) for _ in range(100)]
labels = [torch.randint(0, 2, (1,)) for _ in range(100)]
dataset = Dataset(data, labels)print(f"Dataset length: {len(dataset)}")
print(f"First item: {dataset[0]}")
3. 类中方法的参数 self
类方法的第一个参数必须是 self
,它代表类的实例。
简单示例
在这个简单示例中,我们定义了一个名为Dog
的类,它有一个构造方法来初始化实例变量name
,并且有一个方法bark
来打印狗叫声。
# 类定义
class Dog:def __init__(self, name):self.name = namedef bark(self):print(f"{self.name} says woof!")# 实例化类
dog_instance = Dog("Buddy")
dog_instance.bark()
中等难度示例
在这个示例中,我们定义了一个名为Rectangle
的类,它有一个构造方法来初始化实例变量width
和height
,并且有两个方法area
和perimeter
分别计算矩形的面积和周长。
class Rectangle:def __init__(self, width, height):self.width = widthself.height = heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width + self.height)rect = Rectangle(3, 4)
print(f"Area: {rect.area()}, Perimeter: {rect.perimeter()}")
复杂示例
在这个复杂示例中,我们定义了一个名为LSTMNetwork
的类,它继承了nn.Module
,用于构建一个简单的LSTM神经网络。
class LSTMNetwork(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(LSTMNetwork, self).__init__()self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):out, _ = self.lstm(x)out = self.fc(out[:, -1, :])return out# 实例化类
lstm_model = LSTMNetwork(input_size=10, hidden_size=20, output_size=1)
print(lstm_model)
4. 继承
一个类可以继承另一个类的属性和方法,这称为继承。
简单示例
在这个简单示例中,我们定义了一个名为Animal
的基类和一个名为Cat
的派生类。Cat
类继承了Animal
类的属性和方法,并且重写了make_sound
方法。
class Animal:def __init__(self, species):self.species = speciesdef make_sound(self):print("Some generic sound")class Cat(Animal):def __init__(self, species, name):super().__init__(species)self.name = namedef make_sound(self):print(f"{self.name} says meow")cat_instance = Cat("Feline", "Whiskers")
cat_instance.make_sound()
中等难度示例
在这个示例中,我们定义了一个名为Employee
的基类和一个名为Manager
的派生类。Manager
类继承了Employee
类的属性和方法,并且重写了work
方法。
class Employee:def __init__(self, name, salary):self.name = nameself.salary = salarydef work(self):print(f"{self.name} is working")class Manager(Employee):def __init__(self, name, salary, department):super().__init__(name, salary)self.department = departmentdef work(self):print(f"{self.name} is managing the {self.department} department")manager_instance = Manager("Alice", 90000, "HR")
manager_instance.work()
复杂示例
在这个复杂示例中,我们定义了一个名为BaseModel
的基类和一个
名为CNNModel
的派生类。CNNModel
类继承了BaseModel
类的属性和方法,并且实现了forward
方法。
class BaseModel(nn.Module):def __init__(self):super(BaseModel, self).__init__()def forward(self, x):raise NotImplementedError("Subclasses should implement this!")class CNNModel(BaseModel):def __init__(self, num_classes):super(CNNModel, self).__init__()self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)self.fc1 = nn.Linear(64*7*7, 128)self.fc2 = nn.Linear(128, num_classes)self.dropout = nn.Dropout(0.5)def forward(self, x):x = F.relu(self.conv1(x))x = F.max_pool2d(x, kernel_size=2, stride=2)x = F.relu(self.conv2(x))x = F.max_pool2d(x, kernel_size=2, stride=2)x = x.view(-1, 64*7*7)x = F.relu(self.fc1(x))x = self.dropout(x)x = self.fc2(x)return x# 实例化类
cnn_model = CNNModel(num_classes=10)
print(cnn_model)
5. 方法重写
子类可以重写父类的方法。
简单示例
在这个简单示例中,我们定义了一个名为Animal
的基类和一个名为Dog
的派生类。Dog
类重写了Animal
类的sound
方法。
class Animal:def sound(self):print('动物的声音')class Dog(Animal):def sound(self):print('狗叫声')dog_instance = Dog()
dog_instance.sound()
super(Dog, dog_instance).sound()
中等难度示例
在这个示例中,我们定义了一个名为Writer
的基类和一个名为Blogger
的派生类。Blogger
类重写了Writer
类的write
方法。
class Writer:def write(self):print("Writing generic content")class Blogger(Writer):def write(self):print("Writing blog content")blogger_instance = Blogger()
blogger_instance.write()
super(Blogger, blogger_instance).write()
复杂示例
在这个复杂示例中,我们定义了一个名为BaseOptimizer
的基类和一个名为SGDOptimizer
的派生类。SGDOptimizer
类重写了BaseOptimizer
类的step
方法。
class BaseOptimizer:def __init__(self, lr):self.lr = lrdef step(self):raise NotImplementedError("Subclasses should implement this!")class SGDOptimizer(BaseOptimizer):def __init__(self, lr, momentum):super().__init__(lr)self.momentum = momentumdef step(self):print(f"Performing SGD step with lr={self.lr} and momentum={self.momentum}")# 实例化类
optimizer = SGDOptimizer(lr=0.01, momentum=0.9)
optimizer.step()
相关文章:
【积累】Python的类
类和方法的概念及实例 类 (Class):类是对具有相同属性和方法的对象集合的抽象描述。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 方法:类中定义的函数。 构造方法 __init__():这是一个特殊的方法,会在类实例…...

Golang | Leetcode Golang题解之第318题最大单词长度乘积
题目: 题解: func maxProduct(words []string) (ans int) {masks : map[int]int{}for _, word : range words {mask : 0for _, ch : range word {mask | 1 << (ch - a)}if len(word) > masks[mask] {masks[mask] len(word)}}for x, lenX : ra…...
【感想】支持八股文在面试的应用
八股文:程序员面试中的利与弊 在现代社会的职场竞争中,尤其是IT行业,面试环节常常成为决定一个人能否入职的重要关卡。在这其中,“八股文”作为一种被广泛应用的考核工具,已经成为面试中不可或缺的一部分。然而&#…...
B - 02-计算球的体积 51Nod - 3266
对于半径为 rr 的球,其体积的计算公式为 V4/3πr3V4/3πr3 ,这里取 π3.14π3.14 。现给定 rr ,求 VV 。 Input 输入为一个不超过 100100 的非负实数,即球半径,类型为 doubledouble 。 Output 输出一个实数&#x…...
Qt pro文件详解
概述 在Qt中,.pro 文件(也称为项目文件)是Qt项目管理系统(qmake)所使用的配置文件。这个文件定义了如何构建你的Qt应用程序或库,其使用简单的键值对语法,允许你指定源文件、头文件、库依赖、配置…...

JavaFX布局-ButtonBar
JavaFX布局-ButtonBar 常用属性buttonOrderpaddingbuttonMinWidth 实现方式Java实现fxml实现 一个特殊的容器,用于创建一组按钮,水平排列按钮太多,会被遮住,不会自动产生滚动条 常用属性 buttonOrder 预制顺序 buttonBar.setBut…...

【C++程序设计】——利用数组处理批量数据(二)
👨💻个人主页:开发者-削好皮的Pineapple! 👨💻 hello 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 削好皮的Pineapple! 原创 👨Ǵ…...

使用 1panel面板 部署 php网站
代码仓库:https://github.com/talmudmaster/RedCorpus 目录 网站介绍安装步骤1. 准备云服务器2. 准备域名(可跳过)3. 安装1panel面板4. 服务器开放端口5. 进入1panel面板6. 安装并启动软件(服务器和面板开放端口)7. 创…...

Windows调大虚拟内存来代替升级物理运行内存(RAM)真的有用吗?
前言 前段时间有个粉丝突发奇想说:电脑运行内存不足,调大虚拟内存来代替升级物理运行内存(内存条)不就可以了?剩下的大几百块钱吃香的喝辣的不好吗? 嗯。。。直到2024年的今天,估计还有很多小…...

[Unity] ShaderGraph实现DeBuff污染 溶解叠加效果
本篇是在之前的基础上,继续做的功能衍生。 [Unity] ShaderGraph实现Sprite消散及受击变色 完整连连看如下所示:...
java算法day28
java算法day28 300 最长递增子序列136 只出现一次的数字169 多数元素234 回文链表53 最大子数组和 300 最长递增子序列 这个是记忆化搜索的代码。是从递归改过来的。 这题显然是要用dp做比较合适。因为很容易看到原问题与子问题之间的关系。 还是从后往前看。 然后可以利用选…...
vue实现歌词滚动效果
1.结构 <template><div class"lyricScroll"><div class"audio"><audio id"audio" src"./common/周传雄-青花1.mp3" controls></audio></div><div class"container" id"contai…...

【算法设计题】合并两个非递减有序链表,第1题(C/C++)
目录 第1题 合并两个非递减有序链表 得分点(必背) 题解 函数声明与初始化变量: 初始化合并链表的头节点: 合并两个链表: 处理剩余节点: 返回合并后的链表: 完整测试代码 🌈…...

Vue前端工程
创建一个工程化的vue项目 npm init vuelatest 全默认回车就好了 登录注册校验 //定义数据模型 const registerDataref({username:,password:,rePassword: }) //校验密码的函数 const checkRePassword(rule,value,callback)>{if (value){callback(new Error(请再次输入密…...

什么是药物临床试验?
药物临床试验是指在人体上进行的新药试验研究,旨在确定新药的疗效、安全性、药代动力学和药效学。临床试验不仅帮助确认药物是否对特定疾病或症状有效,还帮助识别和评估药物的副作用和风险。 药物临床试验(Clinical Trial,CT&…...

编译和汇编的区别
一、编译 编译是将高级语言(如C、C、Java等)编写的源代码转换成计算机可以直接执行的低级语言(通常是机器语言或汇编语言)的过程 编译 —— 将人类可读的源代码转换为计算机可执行的指令集 编译过程 通常包括词法分析、语法分…...

C# 设计倒计时器、串口助手开发
文章目录 1. 实现一个简单的倒计时器开始、暂停2. 串口助手开发 1. 实现一个简单的倒计时器开始、暂停 namespace Timer {public partial class Form1 : Form{int count;//用于定时器计数int time;//存储设定的定时值bool parse false;//控制暂停计时public Form1(){Initiali…...

图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)
797 所有可能路径 https://leetcode.cn/problems/all-paths-from-source-to-target/description/ 输入:graph [[1,2],[3],[3],[]] 题目分析,这里 class Solution {//这个不是二维数组,而是listList<List<Integer>> res new Ar…...

Mac安装nvm以及配置环境变量
安装nvm brew install nvm安装成功后会出现这样一段话: Add the following to your shell profile e.g. ~/.profile or ~/.zshrc:export NVM_DIR"$HOME/.nvm"[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh&q…...

AUTOSAR实战教程-使用DET来发现开发错误
2年之前因为在调试AUTOSAR存储协议栈的时候使用DET并没发现有用的信息,所以就武断下结论--这玩意没有用。活到老学到老吧,bug经历的多了,发现这玩意还挺有用的。说一下这个bug的背景。 在将时间同步报文改道CanTsync之后,由于这个AUTOSAR工具本身的问题以及配置工程师本身的…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...