Python类与对象01

news2024/9/28 17:27:50

1、理解使用对象完成数据组织的思路

1.1类和对象的基本理解

理解类:从现实世界到编程世界

类由三个部分组成:类名类的属性类的方法。类的定义实际上是描述事物的一种方法,在现实世界中,事物都是有属性和行为的。通过类,我们可以将这些属性和行为组织在一起,使其更易于管理和使用。

类的基本组成部分
  1. 类名:类的名字,用来标识这个类。例如,我们可以用 Phone 来代表手机这个类。
  2. 类的属性:属性是描述事物特征的变量。例如,一部手机的属性可以包括型号、重量、长宽等。
  3. 类的方法:方法是描述事物行为的函数。例如,手机的行为可以包括上网、打电话、拍照等。
现实世界的类比

手机

  • 属性:型号、重量、长宽
  • 行为:上网、打电话、拍照

为了更好地理解对象和类之间的关系,我们不妨来想象一个场景:

现在,老师要搜集同学们的个人信息。同学们需要将自己的姓名、年龄和城市填在纸上交给老师。那么,你会怎样填写呢?

没错!大多数人会选择列一张表格。

在表格中,我们可以将“姓名”、“年龄”和“城市”看作表格的属性。当不同的同学填写这张表格时,我们就搜集到了不同的数据。

因此我们可以形象地理解为:

  • :一种程序内的设计图纸,就像我们设计的表格模板,定义了所有同学信息的结构。
  • 对象:基于类(设计图纸)创建的具体实体,就像每个同学填写的表格。

在编程中,类定义了对象的属性和行为,而对象则是类的具体实例。

类相当于一种模版,规定了对象应该有哪些属性(如姓名、年龄、城市)以及可以进行哪些操作(如修改属性、打印信息等)。而对象则是具体使用这个模版创建出来的个体,每个对象都有自己的属性值(如小明的姓名、年龄和城市)。

因此,类就像是一张表格的模版,而对象就是填好的每一行表格。类提供了一种统一的结构和行为定义,而对象则是这个结构的具体体现,每个对象都有独特的数据但共享相同的行为。

通过这种方式,类和对象共同使得程序中的数据管理更加有序和高效。

2、编程实现

Python提供了class关键字来定义类,例如:

1.在程序中设计表格,我们称之为:设计类

class student:
    name=None
    age=None
    score=None

我们创建了一个名叫student的类,包含名字,年龄,分数三个属性,并将三个属性的初值赋为None。

2.在程序中打印生产表格:创建对象

stu1=student()
stu2=student()

我们创建了stu1和stu2两个对象,可以理解为两个同学

3.在程序中填写表格,明确对象后对对象的属性赋值:

stu1=student()
stu1.name='张三'
stu1.age=18
stu1.score=80

stu2=student()
stu2.name='李四'
stu2.age=19
stu2.score=90

这样我们就完成了数据的组织,不妨打印以下,看看效果。

 3、成员方法与self关键字

我们在1.1中提到类包含类名,成员属性和成员方法。前两者在2中都已介绍,现在我们来学习成员方法的使用。

成员方法可以理解为类的行为。在程序中则是一个函数。

针对上一问的例子,同学们交代了基本信息,就要做个自我介绍了。我们设计一个程序,让同学们报出自己的名字。

def introduction(self):
        print(f'我是{self.name}')

成员方法

def 关键字: 这是 Python 用来定义函数或方法的关键字。方法是类中的函数,与类的实例相关联。

方法名称

introduction: 这是方法的名称,用于标识这个方法。可以通过调用这个名称来执行方法中的代码。

参数

selfself 是一个引用,指向调用这个方法的实例对象。通过 self,你可以访问对象的属性和其他方法。在类的方法定义中,self 是必须作为第一个参数的,尽管你在调用方法时并不显式传递它。

这里总结以下self的作用:

1、self表示类对象本身的意思。

2、只有通过self,成员方法才能访问类的成员变量。

3、self出现在形参中,但是不占用参数位置。

方法主体

print(f'我是{self.name}')

  • f 字符串:这是一个格式化字符串,用于在字符串中嵌入表达式。以 f 开头的字符串可以在花括号 {} 中包含变量或表达式。
  • self.name:通过 self 访问对象的 name 属性,并将其嵌入到字符串中。

完整运行代码得到如下结果:

4、构造方法

在上面的例子中,我们需要手动为每个对象的属性赋值,这个过程确实比较繁琐,尤其是当对象较多时,会耗费大量时间和精力。为了解决这个问题,我们可以使用构造方法(即初始化方法)来简化属性赋值的过程。

Python中__init__( )方法称为构造方法。

可以实现:

1、创建类对象时自动执行。

2、创建类对象时,将传入参数自动传递给__init__( )方法中。

我们参考下面这个例子:

class Student:
    # 定义类的属性,初始值为 None
    name = None
    age = None
    score = None
    
    # 构造方法,在创建对象时自动调用,用于初始化对象的属性
    def __init__(self, name, age, score):
        self.name = name  # 初始化姓名属性
        self.age = age    # 初始化年龄属性
        self.score = score  # 初始化分数属性
    
    # 成员方法,用于打印对象的自我介绍信息
    def introduction(self):
        print(f'我是{self.name}, 我的年龄是{self.age}, 我的分数是{self.score}')

# 创建 Student 类的对象,并初始化属性
stu1 = Student('小明', 19, 90)

# 调用对象的 introduction 方法,打印自我介绍信息
stu1.introduction()

在上面的代码中,我们定义了一个构造方法 __init__,它接受三个参数:nameagescore。当创建对象时,这些参数将用于初始化对象的属性。

在构造方法中,self.name = name 这一行代码将传入的 name 参数值赋给对象的 name 属性。类似地,self.age = ageself.score = score 将传入的 agescore 参数值赋给对象的相应属性。

当我们创建 Student 类的对象时,例如 stu1 = Student('小明', 19, 90),构造方法 __init__ 会自动调用。

传入的参数 '小明'1990 分别赋值给对象 stu1nameagescore 属性。

最后再强调两点注意事项:

1、构造方法不要忘记使用self关键字。

2、在方法内部使用成员变量需要使用self关键字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习 | 对K-Means聚类假设的研究演示及实践示例

我们在Scikit-learn对K-means假设的调查中探索了揭示算法优势和局限性的场景。我们研究了K-means对不正确的聚类大小的敏感性,它在各向异性分布中面临的困难,它在不同的聚类方差中面临的困难,以及使用合成数据集的大小不均匀的聚类问题。我们…

2024.7.11作业

1.使用递归实现 求 n 的 k 次方 #include <stdio.h> int digui(int n,int k) { if(k0) //任何数的0次方等于1 { return 1; } else { return n*digui(n,k-1); //递归 } } int main(int argc,const char *argv[]) { in…

龙旗科技在线测评、招聘笔试 如何通过、考点分析|备考建议

龙旗电子入职在线测验真题考点分析&#xff0c;通过技巧&#xff1f; ​言语逻辑部分的考试时间是10分钟&#xff0c;需要完成10道题目。每题的作答时间被限定为60秒&#xff0c;一旦提交后无法返回修改。这部分的题目类型包括总结中心思想、选词填空和推理文章意思。考生需要快…

大模型真能模拟人类语言?中国人民大学提出新的数据增强方法

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 论文标题:LLM-Generated Natural Language Meets Scaling Laws: New Explorations and Data Augmentation Methods 机构: School of Information Resource Management, Renmin University …

springboot定制化书籍销售系统-计算机毕业设计源码71193

摘要 随着电子商务的快速发展和图书市场的不断变革&#xff0c;定制化书籍销售系统的需求日益凸显。本文介绍了一种基于SpringBoot框架的定制化书籍销售系统的设计与实现。该系统旨在满足用户对于个性化、专业化的书籍需求&#xff0c;为用户提供高效、便捷的定制化购书体验。 …

C# HuaYun出口服务器

直连 串口转网口&#xff1a;通过请求帧写入波特率 或者地址位 或者温度 湿度等数据 读取时候 [0x01,0x03] 写入的时候[0x01&#xff0c;0x03] 写入波特率的时候请求帧 [0x01,0x06,0x07,0xD1,0x01,0x14] 把波特率改成0x01,0x14 namespace _01_HuaYun出口服务器 {public partia…

如何监控别人的聊天记录?三种监控聊天记录的方式,千万别让老板看见

监控别人的聊天记录&#xff0c;无论是出于父母对子女的关心、企业管理层对员工的监管&#xff0c;还是其他目的&#xff0c;都必须在法律许可的范围内进行&#xff0c;并且通常需要获得被监控者的明确同意。 非法监控他人的通信记录是严重侵犯隐私权的行为&#xff0c;违反了…

《昇思25天学习打卡营第18天|onereal》

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film…

pdf压缩文件怎么压缩到小于10M或5m 且文件质量不影响画质清晰度

在数字化办公和学习中&#xff0c;pdf格式因其良好的兼容性和稳定性而受到广泛应用。然而&#xff0c;pdf文件体积较大时&#xff0c;会给我们带来传输和存储上的困扰。本文将为您介绍几种简单有效的方法&#xff0c;帮助您轻松压缩pdf文件&#xff0c;提高传输效率&#xff0c…

掉打面试官之Java的SPI机制理解

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【HMAC(ArkTS)】

HMAC(ArkTS) HMAC是密钥相关的哈希运算消息认证码&#xff08;Hash-based Message Authentication Code&#xff09;&#xff0c;是一种基于Hash函数和密钥进行消息认证的方法。 开发步骤 生成密钥 指定密钥别名。初始化密钥属性集。调用[generateKeyItem]生成密钥&#xf…

武夷山细节决定成败抓质量求生存

在当今竞争激烈的市场环境中&#xff0c;细节决定成败&#xff0c;质量求生存的理念已成为企业发展的关键。蓝鹏测控科技有限公司&#xff0c;一家专业从事工业测量领域的高新技术企业&#xff0c;正是秉持这一理念&#xff0c;在工业测径仪领域取得了显著成就。 蓝鹏测控科技…

tensorflow卷积层操作

全连接NN&#xff1a; 每个神经元与前后相邻层的每一个神经元都有全连接关系。输入是特征&#xff0c;输出为预测结果。 参数个数(前层*后层后层&#xff09; 实际应用时&#xff0c;会先对原始图像进行特征提取&#xff0c;再把提取到的特征送给全连接网络 会先进行若干层提…

复杂度(上卷)

前言 在正式进入今天的主题之前&#xff0c;我们不妨先来回顾一下初步学习数据结构后必须知道的概念。&#x1f3b6; 数据结构 数据结构是计算机存储、组织数据的方式&#xff0c;指相互间存在一种或多种特定关系的数据元素的集合。 &#xff08;没有一种单一的数据结构能够…

在centos7中安装MySQL5.7,是否必须卸载centos7自带的mariadb?

在CentOS 7 中安装 MySQL 5.7 时&#xff0c;不一定必须卸载系统自带的 MariaDB&#xff0c;但为了避免冲突和确保 MySQL 的正常运行&#xff0c;通常建议先卸载 MariaDB。以下是具体的步骤&#xff1a; 卸载 MariaDB&#xff08;如果已经安装&#xff09;&#xff1a; sudo sy…

强化学习驱动的狼人游戏语言智能体战略玩法

Language Agents with Reinforcement Learning for Strategic Play in the Werewolf Game 论文地址: https://arxiv.org/abs/2310.18940https://arxiv.org/abs/2310.18940 1.概述 在AI领域,构建具备逻辑推理、战略决策以及人类沟通能力的智能体一直被视为长远追求。大规模语…

小阿轩yx-NoSQL 之 Redis 配置与优化

小阿轩yx-NoSQL 之 Redis 配置与优化 Redis 数据库介绍 是一个非关系型数据库 关系数据库与非关系型数据库 按照数据库结构划分的 关系型数据库 是一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;一般面向于记录借助集合代数等数学概念和方法处理数据库…

设计模式探索:责任链模式

1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下&#xff1a; 避免将一个请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链传递请求&…

数列分块<2>

本期是数列分块入门<2>。该系列的所有题目来自hzwer在LOJ上提供的数列分块入门系列。 Blog:http://hzwer.com/8053.html sto hzwer orz %%% [转载] 好像上面的链接↑打不开&#xff0c;放一个转载:https://www.cnblogs.…

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…