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

python——类

问:小编为什么突然开始发python?难道C语言你不行了?

废话少说,让我们进入python中的类的学习!!

(一)基本知识

(1)掌握类的概念

1、类的定义:

即用来描述具有 相同属性和方法 的对象的集合

2、示例:

就像int类,其中有100,20等不同的对象。(和C语言中的结构体类似)

(2)定义一个类

1、语法:

class Student:

        pass         #pass语句的作用就是占位,在还未确定好具体的内容的时候使用

2、 类 Student是对象吗?

在python中,只要是对象,那么就有地址,类型和值三个,

所以我们可以验证!!

代码如下:

class Student:pass
print(id(Student))
print(type(Student))
print(Student)

由代码的结果我们可以知道,类也是对象!

(3)类的组成

1、示例
class Student:my_home='甘肃'   #类属性def __init__(self,name,age):# __init__ 实例方法self.name=nameself.age=agedef meat(self): #方法print("喜欢吃肉")@classmethoddef cm(cls):#类方法print("类方法")@staticmethoddef sm():#静态方法print("静态方法")

由代码所示,类的组成一般就是这四个,不需要全部都存在(看具体情况,自行添加)

2、组成各部分的具体解释
(1)def __init__ (self,name,age):

                 self.name = name

                 self.age = age

在Python中,def __init__(self): 是一个特殊的方法,被称为构造函数或初始化方法。它是在创建一个类的实例时自动调用的,用于初始化该实例的属性。

  •  __init__(self) 方法的定义中,形参self 必不可少,而且必须位于其他形参的前面。Python调用这个方法来创建 Student 实例时,将自动传入实参self
  • self参数代表当前实例对象。通过self可以访问实例的属性和方法。
  • __init__(self)方法中,我们可以给实例对象设置初始值。可以通过self.属性名(注意,这个属性名可以是任何名称,并且与之后的调用是相对应的,但是(self,name,age)中的name和age尽量见名知意来指定实例对象的属性,并为其赋予初始值。
  • 如何使用呢? 即在类之外使用  具体如下                                                                         
     person=Student('张三',20)#创建一个实例对象
    即就是给 name初始化为 ’张三‘ age初始化为20 。调用时,如果想打印 person中的值,可以写为如下代码 
     print(person.name,person.name)
(2)def meat ( self ) :

                 print("喜欢吃肉")

在python中,def meat(self): 是 自定义的方法,参数为 self  。

在这个方法中,可以调用实例方法中的实例!!

  • 在自定义方法中调用实例方法中的属性                                                                                   如:person.meat() #注意这里一定是已经创建了一个person的实例对象,代码请看之前
(3)  @classmethod
           def cm(cls):#类方法
                   print("类方法")

          @staticmethod
          def sm():#静态方法
                  print("静态方法")

  • 这两种方法的调用类似,都是直接使用 类名.方法名 来调用,如下:
    Student.cm()
    Student.sm()
(4)类属性
  • 类中的方法外的变量,被所有的对象共享!
    • 类属性的调用                                                                                                                  上述的代码,即可调用写为 print (Student.my_home )

(二)动态绑定属性和方法

(1)动态绑定属性

在python中,类在定义好之后,可能有时候会涉及到某一个实例对象的属性不想再另外一个实例对象中使用,那么这个时候就需要动态绑定来解决

具体如下:还是上述建立的 Student类 首先创建两个实例对象 然后存储在 stu1 和stu2 中

代码如下

stu1 = Student('李四',20)
stu2 = Student('王麻子',30)

现在代码中是两个人的信息,现在已知的是 李四是个男的,需要打印出来,但是王麻子性别不知道,所以不打印,那么应该怎么做? 

          直接在 __init__(self) 方法中再加一个 性别属性?但是仔细想想,那样定义的属性是所有的实例对象共有的,所以是不行的,那就让我们使用动态绑定的方法来解决!

如下:

我们发现,第三行代码就是给stu1动态绑定一个属性,此时当stu2也试图使用的时候就会发生错误

(2)动态绑定方法

基本原理同上述动态绑定属性

(1)和绑定属性一样,单独绑定一个方法需要在类之外

如下:

如图片所示,相当于定义了一个函数,然后单独绑定给了stu1,最后一行代码是调用。

(三)面向对象的三大特征

(1)封装

1、作用:提高程序的安全性

2、具体:就是将数据(类型)和行为(方法)包装到类对象中,并且隐藏对象的属性和实现的细节,只暴露调用方法

小技巧:可以在类中某个属性名称前面加上__(两个下划线),从而不希望在外部被访问;

我们发现这样对实例属性进行操作之后,就无法以正常的方式在类外调用

但是任然可以通过 dir()查出类中的所有属性,然后看具体应该如何使用,如下:

我们发现,stu1 所对应的 实例属性'_Student__brand' ,和其他如:name 不太相同,这说明是有着特定的语法能够调用的!

具体语法格式为  :stu1._Student__brand

(2)继承

1、语法格式:

class 子类名(父类1,父类2,...)

  • 在python中,支持多继承
  • 若没有填写父类,则默认继承 object类
  • 定义子类的时候,必须在其构造函数中调用父类的构造函数                                        
2、示例:

代码如下

class Person(object):#此处的子类为Person,父类为 objectdef __init__(self,name,age):#在Person类中有实例方法self.name = nameself.age = agedef info(self): #在Person中定义一个方法 info,作用是打印实例属性 name和ageprint(self.name,self.age)
class Student(Person):#此处的子类为Student ,父类为 Persondef __init__(self,name,age,student_year):#此处为定义自己的实例方法,多了一个实例属性为#student_yearsuper().__init__(name,age)#继承其父类的实例方法,必须为super().父类方法名()self.student_year = student_year#属性重写def info(self):#定义自己的方法super().info()#继承父类的方法,必须为super().父类方法名()print(self.salary)#方法重写
class Teacher(Person):#原理同上def __init__(self,name,age,teacher_year):super().__init__(name,age)self.teacher_year=teacher_yeardef info(self):super().info()print(self.teacher_year)
stu=Student('zhangsan',20,5)#创建Student的类的实例对象,存放在stu中,其中包含在父类中继承的两个属性和自定义的一个属性
tea=Teacher('lisi',35,10)#同上
stu.info()#调用方法
tea.info()

在本代码中,有小编写的详细的注解,接下来图解上述代码,大家可以通过图片来理解!

(3)方法重写

1、即子类继承的父类中的属性和方法,对于子类来说是不足以支持子类的需求的,此时就需要对其进行重写

2、示例:

(1)属性重写;上述 继承 中的代码片段,有

对于这个父类,只有两个实例属性,最后创建好调用,可以打印姓名和年龄,但是很明显对于 Student 和Teacher两个子类是不足够的,那么就可以写为如下

我们不难发现,在两个子类中又加了属性分别为 student_year , teacher_year


方法重写:也在上述代码中有体现,你发现了吗?

(四)object类/多态

(1)object 类

1、定义

所有类的父类,所有类都有object类中的属性和方法

2、内置函数 dir

(1)作用,在之前我们已经提及,其作用就是可以查看所指定对象中的方法和属性

(2)用法:print(dir(某个对象名称))

(3)示例:查看object类

(4)重写 __str__ 方法

在python中,object类中的所有方法都是可以进行重写的,从而改变其原来的作用原理,来达到自己所需要的目的!

对于 str 方法,其默认是在使用print函数来打印类的对象的时候实现的,其作用是返回地址

1、未改写之前(代码还是上述 ‘继承’ 中的代码)

2、改写

def __str__(self):return '名字{0},今年{1}岁,当学生{2}年'.format(self.name,self.age,self.student_year)

代码写在Student类中,

改写之后再次打印

相关文章:

python——类

问:小编为什么突然开始发python?难道C语言你不行了? 废话少说,让我们进入python中的类的学习!! (一)基本知识 (1)掌握类的概念 1、类的定义: 即…...

走廊泼水节——求维持最小生成树的完全图的最小边权和

题目 思考 代码 #include <bits/stdc.h> using namespace std; const int N 6010; const int M N; int p[N], sz[N]; struct edge{int a;int b;int c;bool operator < (const edge& v) const{return c < v.c;} }e[M]; int find(int x) {if(p[x] ! x) p[x] …...

LC:动态规划-买卖股票

文章目录 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II714. 买卖股票的最佳时机含手续费309. 买卖股票的最佳时机含冷冻期 121. 买卖股票的最佳时机 链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 使用贪心&#xff0c…...

FLINK SQL 任务参数

在Flink SQL任务中&#xff0c;参数配置对于任务的性能和稳定性至关重要。以下是对运行时参数、优化器参数和表参数的详细解析&#xff1a; 一、运行时参数 运行时参数主要影响Flink作业在执行过程中的行为。以下是一些关键的运行时参数&#xff1a; 并行度&#xff08;Para…...

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述&#xff1a; ①DHCP Snooping使能DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…...

k8s worker 节点关机 sts 管理的 pod 无法迁移

背景 1.28.2 版本 k8s 中的一台 worker 节点内存异常&#xff0c;需要关机换内存&#xff0c;正好可以测试一下 pod 的迁移。 发现 deployment 管理的 pod 是能够重新创建飘到其他节点上的&#xff0c;但是 statefulset 管理的 pod 一直处于 Terminating 状态无法迁移&#…...

排序04 视频播放建模

视频播放时长 用p拟合y&#xff0c;t是用户的实际观看时长&#xff0c;用y和p熵作为损失函数&#xff0c;使得p接近y。 输出z,对z做sigmoid变换。 exp(z)可以视为对播放时长的预估 视频完播 回归方法 二元分类方法 调整&#xff1a;预估完播率不能直接使用...

【常见大模型API调用】第三篇:清华智谱--智谱AI

1. 公司及模型介绍 智谱AI是一家由清华大学计算机系知识工程实验室的技术成果转化而来的AI知识智能技术开发商。智谱AI致力于打造新一代认知智能大模型&#xff0c;专注于做大模型的中国创新。 2024年1月16日&#xff0c;智谱AI在首届技术开放日上发布了新一代基座大模型GLM-…...

LayerSkip – Meta推出加速大型语言模型推理过程的技术

我们提出的 LayerSkip 是一种端到端的解决方案&#xff0c;可加快大型语言模型&#xff08;LLM&#xff09;的推理速度。 首先&#xff0c;在训练过程中&#xff0c;我们采用了层间丢弃技术(layer dropout)&#xff0c;早期层间丢弃率较低&#xff0c;后期层间丢弃率较高。 其次…...

环境变量与本地变量(Linux)

引言 在当今的计算机技术领域&#xff0c;Linux操作系统以其稳定性和灵活性而广受欢迎。它不仅是服务器和开发者的首选平台&#xff0c;也是探索计算机科学和系统编程的宝库。在这个强大的操作系统中&#xff0c;环境变量与本地变量扮演着至关重要的角色&#xff0c;它们是管理…...

【完-网络安全】Windows防火墙及出入站规则

文章目录 防火墙入站和出站的区别域网络、专用网络、公用网络的区别 防火墙 防火墙默认状态一般是出站允许&#xff0c;入站阻止。 入站和出站的区别 入站就是别人来访问我们的主机&#xff0c;也就是正向shell的操作 出站就是反向shell&#xff0c;主机需要主动连接kali&am…...

Vue学习记录之十七 css中样式穿透及新特征介绍

一、scoped原理 在vue页面的css中,有一个设置为scoped,使用以后dom的节点会出现下面的规则。其实我们打完包就是一个html页面,如果不做处理,将会导致css混乱。 给HTML的DOM节点加一个不重复data属性(形如:data-v-123)来表示他的唯一性在每句css选择器的末尾(编译后的生成的…...

Nature 正刊丨海洋涡旋中常见的地下热浪和寒潮

01摘要 由于全球变暖&#xff0c;极端海洋温度事件变得越来越普遍&#xff0c;造成了灾难性的生态和社会经济影响1,2,3,4,5。尽管基于卫星观测对表层海洋热浪&#xff08;MHW&#xff09;和海洋寒潮&#xff08;MCS&#xff09;进行了广泛的研究6,7&#xff0c;但我们对这些极…...

代码随想录算法训练营第六十二天| prim算法,kruskal算法

训练营六十二天打卡&#xff0c;图论比较难&#xff0c;坚持下来胜利就在眼前&#xff01; 53.卡码网【寻宝】 题目链接 解题过程 没做过类似的题目&#xff0c;跟着答案敲了一遍最小生成树 可以使用 prim算法 也可以使用 kruskal算法计算出来。prim算法 是从节点的角度 采用…...

Newstar_week1_week2_wp

week1 wp crypto 一眼秒了 n费马分解再rsa flag&#xff1a; import libnum import gmpy2 from Crypto.Util.number import * p 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297…...

今天我们研究一段代码(异或位运算)

let a 18 // 甲 let b 20 // 乙a a ^ b b a ^ b a a ^ b console.log("a",a) // a 20 console.log("b",b) // b 18今天我们就研究上面这一段代码&#xff0c;简单解释一下&#xff0c;初始化一个a 18 b 20&#xff0c; 中间经过了三次的异或之后…...

pycharm中使用ctrl+鼠标滚轮改变字体大小

文章目录 pycharm使用ctrl鼠标滚轮改变字体大小1.打开pycharm选择file2.选择setting4.选择keymap&#xff0c;然后再右边的输入框中输入increase进行增大字体4.鼠标选择后&#xff0c;点击添加鼠标快捷方式&#xff0c;然后设置鼠标滚轮往上增大字体。5.设置缩小字体&#xff0…...

【算法-动态规划】打家劫舍专题

文章目录 1.打家劫舍1.1一维数组1.2三变量法1.3双数组法 2.打家劫舍22.1双数组法2.2 三变量法 3.打家劫舍33.1动态规划3.2双变量法 4.删除相邻数字的最大分数4.1双状态数组4.2一维数组4.3三变量法 1.打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 1.1一维数…...

关于技术管理者的一些思考

前 言 在软件开发领域&#xff0c;当一名资深工程师有机会成为一名技术管理者的时候&#xff0c;通常他/她的反应是什么&#xff1f;兴奋、担扰、无奈还是推托&#xff0c;具体是什么心情也许对结果并不重要&#xff0c;更加重要是在一刻&#xff0c;我们一定要问问我们内心的…...

Alpha-CLIP: A CLIP Model Focusing on Wherever You Want CVPR 2024

在原始的接受RGB三通道输入的CLIP模型的上额外增加了一个alpha通道。在千万量级的RGBA-region的图像文本对上进行训练后&#xff0c;Alpha-CLIP可以在保证CLIP原始感知能力的前提下&#xff0c;关注到任意指定区域。 GitHub - SunzeY/AlphaCLIP: [CVPR 2024] Alpha-CLIP: A CLI…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...