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

【积累】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的类,它有一个构造方法来初始化实例变量brandmodel,并且有一个方法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_coordy_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的类,它有一个构造方法来初始化实例变量nameage,并且有一个方法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的类,它有一个构造方法来初始化实例变量widthheight,并且有两个方法areaperimeter分别计算矩形的面积和周长。

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题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; 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…...

【感想】支持八股文在面试的应用

八股文&#xff1a;程序员面试中的利与弊 在现代社会的职场竞争中&#xff0c;尤其是IT行业&#xff0c;面试环节常常成为决定一个人能否入职的重要关卡。在这其中&#xff0c;“八股文”作为一种被广泛应用的考核工具&#xff0c;已经成为面试中不可或缺的一部分。然而&#…...

B - 02-计算球的体积 51Nod - 3266

对于半径为 rr 的球&#xff0c;其体积的计算公式为 V4/3πr3V4/3πr3 &#xff0c;这里取 π3.14π3.14 。现给定 rr &#xff0c;求 VV 。 Input 输入为一个不超过 100100 的非负实数&#xff0c;即球半径&#xff0c;类型为 doubledouble 。 Output 输出一个实数&#x…...

Qt pro文件详解

概述 在Qt中&#xff0c;.pro 文件&#xff08;也称为项目文件&#xff09;是Qt项目管理系统&#xff08;qmake&#xff09;所使用的配置文件。这个文件定义了如何构建你的Qt应用程序或库&#xff0c;其使用简单的键值对语法&#xff0c;允许你指定源文件、头文件、库依赖、配置…...

JavaFX布局-ButtonBar

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

【C++程序设计】——利用数组处理批量数据(二)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-削好皮的Pineapple! &#x1f468;‍&#x1f4bb; hello 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 削好皮的Pineapple! 原创 &#x1f468;‍&#x1f4…...

使用 1panel面板 部署 php网站

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

Windows调大虚拟内存来代替升级物理运行内存(RAM)真的有用吗?

前言 前段时间有个粉丝突发奇想说&#xff1a;电脑运行内存不足&#xff0c;调大虚拟内存来代替升级物理运行内存&#xff08;内存条&#xff09;不就可以了&#xff1f;剩下的大几百块钱吃香的喝辣的不好吗&#xff1f; 嗯。。。直到2024年的今天&#xff0c;估计还有很多小…...

[Unity] ShaderGraph实现DeBuff污染 溶解叠加效果

本篇是在之前的基础上&#xff0c;继续做的功能衍生。 [Unity] ShaderGraph实现Sprite消散及受击变色 完整连连看如下所示&#xff1a;...

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题 合并两个非递减有序链表 得分点&#xff08;必背&#xff09; 题解 函数声明与初始化变量&#xff1a; 初始化合并链表的头节点&#xff1a; 合并两个链表&#xff1a; 处理剩余节点&#xff1a; 返回合并后的链表&#xff1a; 完整测试代码 &#x1f308;…...

Vue前端工程

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

什么是药物临床试验?

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

编译和汇编的区别

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

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/ 输入&#xff1a;graph [[1,2],[3],[3],[]] 题目分析&#xff0c;这里 class Solution {//这个不是二维数组&#xff0c;而是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工具本身的问题以及配置工程师本身的…...

ZeroMQ(二):请求-响应模式,C和C++。

目录 请求响应基础 基本概念 工作流程 典型应用 请求-响应模式的特点 应用实例 优点 缺点 ZEROMQ C语言 2.1 服务器端代码&#xff08;Reply Server&#xff09; 2.2 客户端代码&#xff08;Request Client&#xff09; 3. 编译代码 4. 详细说明 ZEROMQ C 1. …...

【虚拟仿真】Unity3D中实现2DUI显示在3D物体旁边

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章来实现2DUI显示在3D物体旁边,当我们需要在3D模型旁边显示2DUI的时候,比如人物的对…...

代码随想录 day 29 贪心

第八章 贪心算法 part03 134. 加油站 本题有点难度&#xff0c;不太好想&#xff0c;推荐大家熟悉一下方法二 https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html 135. 分发糖果 本题涉及到一个思想&#xff0c;就是想处理好一边再处理另一边&#xff0c;不…...

开源:LLMCompiler高性能工具调用框架

开源&#xff1a;LLMCompiler高性能工具调用框架 LLMCompilerLLMCompiler 框架图任务提取单元使用方式参考链接 LLMCompiler LLMCompiler 是一种 Agent 架构&#xff0c;旨在通过在DAG中快速执行任务来加快 Agent 任务的执行速度。它还通过减少对 LLM 的调用次数来节省 Tokens …...

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …...

LeetCode Medium|【146. LRU 缓存】

力扣题目链接 题意&#xff1a;本题的题意就是希望我们设计一个满足 LRU 缓存的数据结构&#xff0c;LRU即最近最少使用。 需要我们实现 get 和 put 方法&#xff0c;即从缓存中获取值和设置缓存中值的方法。 还有一个约束条件就是缓存应当有容量限制&#xff0c;如果实现 put …...

(南京观海微电子)——LCD OTP(烧录)介绍

OTP OTP只是一种存储数据的器件&#xff0c;全写:ONETIMEPROGRAM。 OTP目的&#xff1a;提高产品的一致性 客户端的接口不支持和我们自己的产品IC之间通信&#xff0c;即不支持写初始化&#xff0c;所以产品的电学功能以及光学特性需要固化在IC中&#xff0c;所以需要我们来进行…...

[E二叉树] lc572. 另一棵树的子树(dfs+前中序判断+树哈希+树上KMP+好题)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;572. 另一棵树的子树 2. 题目解析 看到这个题目就感觉不简单&#xff0c;因为写了写 dfs 版本的&#xff0c;发现好像不太会… 还是简单粗暴一点&#xff0c;直接搞一个 前序中序&#xff0c;进行判断即可。我…...

C# 设计模式之简单工厂模式

总目录 前言 本文是个人基于C#学习设计模式总结的学习笔记&#xff0c;希望对你有用&#xff01; 1 基本介绍 简单工厂模式 定义&#xff1a;用于创建对象&#xff0c;将对象的创建与使用分离。 简单工厂模式中用于创建实例的方法是静态(static)方法&#xff0c;因而简单工厂…...

mac中dyld[5999]: Library not loaded: libssl.3.dylib解决方法

需要重新安装下openssl3.0版本 brew reinstall openssl3.0 安装后执行还是报错&#xff0c;需要找到openssl的安装路径 /opt/homebrew/Cellar/openssl3.0/3.0.14/lib/ 将libssl.3.dylib和libcrypto.3.dylib拷贝到自己的二进制文件同目录下&#xff0c;再执行二进制文件就可…...

后台模板链接前台网站/在线网站建设

当页面的高度超出显示高度时&#xff0c;滚动页面会出现滚动条app端可以设置关闭&#xff0c;操作方法如下&#xff1a;属性&#xff1a;"scrollIndicator": "none""pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;ht…...

淮安哪个做网站好点/图片外链生成器

Word Completion 只是代码补全 Content Assist 为代码补全并自动导入...

网站是用什么程序做的/平面设计主要做什么

本文将要为您介绍的是Internet worm(Java网络爬虫-虎牙篇),具体操作方法:jsoup虎牙篇IDE&#xff1a;Idea&#xff1a;package InternetWorm.huyaData;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elemen…...

怎么评判一个网站做的好与坏/百度问答我要提问

在store当中添加groupField: sex指定针对sex进行分组&#xff0c; 单纯上面的配置并不能起作用&#xff0c;还必须在GridPanel中设置features: [{ftype:grouping}].另外可以通过grid.view.features[0]获取分组表格feature的实例&#xff0c;然后调用其功能函数expandAll或coll…...

江门网站优化快速排名/seo标题优化的心得总结

在互联网世界中&#xff0c;夹杂着复杂的LAN和广域网。然而&#xff0c;再复杂的网络结构中&#xff0c;也需要通过合理的路由将数据发送到目标主机。而决定这个路由的&#xff0c;正是路由控制模块。路由控制的定义IP地址与路由控制互联网是由路由器连接的网络组合而成的。为了…...

东莞公司网站价格/b2b网站平台

对数器 对数器可以在不使用oj平台的情况下创建测试样例测试代码。 对数器的原理是创建大量随机样例对自己写好的方法进行测试&#xff0c;将这些结果与简单、效率低下的方法或系统写好的方法得出来的结果进行比对。如果大量测试之后没有错误&#xff0c;那基本可以确定代码正确…...