【Python 类基础介绍】

文章目录

  • 一、类的基本概念
    • 1. 什么是类?
    • 2. 类与对象的关系
    • 3. 类的优点
  • 二、定义和使用类
    • 1. 类的定义
    • 2. 类属性和方法
      • 类属性
      • 实例属性
      • 方法
    • 3. 对象的创建和使用
  • 三、类的高级特性
    • 1. 继承
    • 2. 多态和封装
      • 多态
      • 封装
    • 3. 特殊方法
      • 示例:`__str__` 和 `__repr__`

一、类的基本概念

1. 什么是类?

在Python中,类定义了一种数据类型的属性(数据成员)和方法(函数)。可以将类比作一个模板,它描述了如何构造特定类型的对象。这包括对象应有的数据结构(例如,一个学生类可能有姓名、年龄和学号属性)以及可以应用于这些数据的操作(例如,计算学生的年龄或更改其姓名)。

class Student:def __init__(self, name, age, student_id):self.name = nameself.age = ageself.student_id = student_iddef update_name(self, new_name):self.name = new_name

Student 类定义了三个属性和一个方法。__init__ 方法是一个特殊的方法,当新的对象被创建时,它会自动调用来初始化对象。

2. 类与对象的关系

类和对象的关系可以用“模板”和“实例”来比喻。类是一个模板,它定义了如何构建某种类型的对象。而对象是根据这个模板创建的实例。每个对象都具有类定义的属性和方法,但每个对象的属性值可以独立于其他对象存在。

如果创建了多个Student对象,每个对象都会有nameagestudent_id属性,但这些属性的具体值会根据每个对象不同而不同。

student1 = Student("Alice", 20, "S001")
student2 = Student("Bob", 22, "S002")student1.update_name("Alicia")
print(student1.name)  # 输出 Alicia
print(student2.name)  # 输出 Bob

3. 类的优点

  • 代码重用:一旦定义了类,就可以在多处创建该类的对象,无需重复编写代码。不仅节省时间,还减少错误。
  • 封装:类允许将数据(属性)和操作这些数据的方法封装在一起。这种封装性提高了代码的安全性,因为可以限制外部对类内部数据的直接访问。
  • 抽象:类提供了一种抽象的方式来处理现实世界的问题。程序员可以关注对象的行为,而不必过分关注底层的实现细节。

二、定义和使用类

1. 类的定义

在Python中,类是通过class关键字定义的。类名通常遵循大驼峰命名法(CamelCase),即所有单词的首字母大写,其余字母小写,单词之间不使用下划线。这种命名方式有助于区分Python中的类名和其他变量或函数名。

class MyClass:pass

MyClass 是类名,而pass是一个占位符,用于表示这个类暂时不包含任何内容。

2. 类属性和方法

类属性

类属性是定义在类中的变量,它为类的所有实例提供共享的数据。类属性对于所有实例来说都是相同的,除非明确地为某个对象改变这些属性。

实例属性

实例属性是通过类的构造器__init__方法定义的,它们是每个对象特有的数据。

方法

类中的方法是一种特殊的函数,用于定义对象的行为或操作这些数据的方式。

class Dog:# 类属性species = "Canis familiaris"# 初始化方法def __init__(self, name, age):self.name = name  # 实例属性self.age = age    # 实例属性# 示例方法def description(self):return f"{self.name} is {self.age} years old"

Dog 类有一个类属性species,每个Dog对象都有nameage属性,以及一个description方法,用于返回描述狗的字符串。

3. 对象的创建和使用

要使用类,必须创建其实例,称为实例化。在Python中,实例化类非常简单,只需要调用类本身像函数一样,传递所需的参数给__init__方法。

创建和使用Dog类的实例:

my_dog = Dog("Rex", 5)
print(my_dog.description())

my_dogDog类的一个实例,它具有名为"Rex"和年龄为5的属性。通过调用my_dog.description()方法,我们可以得到并打印出描述狗的字符串。

三、类的高级特性

1. 继承

继承是面向对象编程中一个基本概念,它允许定义一个继承了一个或多个父类(或基类)属性和方法的新类(子类或派生类)。通过继承,子类可以复用父类的代码,不仅简化了程序设计,还有助于减少代码冗余。

class GermanShepherd(Dog):def speak(self):return "Woof"

GermanShepherd 类继承自Dog 类。这意味着GermanShepherd类自动获得了Dog类的所有属性和方法,而且我们还为它添加了一个新的方法speak。这样,GermanShepherd的实例不仅可以使用Dog类中定义的所有属性和方法,还可以使用这个专有的speak方法。

2. 多态和封装

多态

多态允许不同类的对象对同一消息作出响应。例如,如果有多个类都定义了同一方法,根据对象的具体类型,可以有不同的实现方式,但从外部看,似乎是同样的操作。

封装

封装是将对象的数据(属性)和操作这些数据的代码(方法)捆绑在一起的过程。这样,对象内部的实现细节对外部是隐藏的,只能通过定义好的接口与对象交互。封装的好处是增加了代码的安全性和健壮性,避免了外部代码随意改变对象内部的状态。

3. 特殊方法

Python中的特殊方法(也称为魔术方法)是一类以双下划线(__)开头和结尾的方法,它们有其特定的用途和行为。

示例:__str____repr__

__str____repr__是两个常用的特殊方法,用于定义对象的“非官方”或可读性强的字符串表示以及“官方”或严格的字符串表示。

class Dog:def __init__(self, name, species):self.name = nameself.species = speciesdef __str__(self):return f"{self.name} is a friendly {self.species}"def __repr__(self):return f"{self.name} is a {self.species}"

当打印一个对象时(例如使用print()函数),__str__方法将被调用。当在解释器中直接查看对象或在某些情况下需要精确表示时,__repr__方法将被调用。这些方法使得类更加友好和易于调试。

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

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

相关文章

[数据结构]———归并排序

具体代码:在gitee仓库:登录 - Gitee.com 目录 ​编辑 1.基本思想: 2. 代码解析 1.分析 2.逻辑图 3.运行结果 1.基本思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分…

个人对行为型设计模式的理解 @by_TWJ

目录 1. 访问者模式2. 迭代器模式3. 观察者模式4. 模板模式5. 状态模式6. 备忘录模式7. 策略模式8. 解释器模式9. 责任链模式10. 命令模式11. 中介者模式 研究了一下,我为了方便理解,对它们进行了分类: 针对请求者与执行者关系方面 1对多 - 责…

695. 岛屿的最大面积

695. 岛屿的最大面积 题目链接&#xff1a;695. 岛屿的最大面积 代码如下&#xff1a; class Solution { public:int maxAreaOfIsland(vector<vector<int>>& grid) {vector<vector<bool>> visited(grid.size(),vector<bool>(grid[0].size…

算法打卡day40

今日任务&#xff1a; 1&#xff09;139.单词拆分 2&#xff09;多重背包理论基础&#xff08;卡码网56携带矿石资源&#xff09; 3&#xff09;背包问题总结 4&#xff09;复习day15 139单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; …

【Hive】自定义函数从编写到应用的整个流程(以UDF为例)

1. 编写UDF程序 以Java为例&#xff0c;编写一个字符串反转的函数&#xff08;工程依赖部分略&#xff09;&#xff1a; package com.example;import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hiv…

Pytorch学习笔记——TensorBoard的初使用

1、TensorBoard介绍 TensorBoard是TensorFlow的可视化工具&#xff0c;但它也可以与PyTorch结合使用。TensorBoard提供了一个Web界面&#xff0c;可以展示你训练过程中的各种信息&#xff0c;如损失值、准确度、权重分布等&#xff0c;更好地帮助开发者理解和调试模型。 Tenso…

huggingface里如何查看具体任务的评估指标

如果我们在做一个模型训练任务的时候&#xff0c;可能会不知道这个任务在评估的时候使用什么指标&#xff0c;那么huggingface里边为我们提供了参考&#xff1a; 下面就来看看吧&#xff1a; https://huggingface.co/https://huggingface.co/ 点击"Docs"&#xff…

【算法】【单调栈】【leetcode】1019. 链表中的下一个更大节点

刷这题之前先看&#xff1a; 【算法】【OD算法】【单调栈】找朋友-CSDN博客 【算法】【单调栈】【leetcode】1475. 商品折扣后的最终价格-CSDN博客 【算法】【单调栈】【leetcode】901. 股票价格跨度-CSDN博客 【算法】【单调栈】每日温度-CSDN博客 题目地址&#xff1…

嵌入式硬件中PCB走线与过孔的电流承载能力分析

简介 使用FR4敷铜板PCBA上各个器件之间的电气连接是通过其各层敷着的铜箔走线和过孔来实现的。 由于不同产品、不同模块电流大小不同,为实现各个功能,设计人员需要知道所设计的走线和过孔能否承载相应的电流,以实现产品的功能,防止过流时产品烧毁。 文中介绍设计和测试FR4敷…

iOS分享弹窗

klkxxy/分享菜单弹窗

抖音视频0粉营销推广墙纸,当日收益,第二天提现,日入300

项目简介&#xff1a; 这个项目非常易于执行&#xff0c;主要涉及在抖音平台上分享爱国主题的壁纸&#xff0c;并通过推广相关的小程序来实现盈利。 下 载 地 址 &#xff1a; laoa1.cn/1849.html 项目操作简便&#xff0c;一般只需花费1个小时即可完成&#xff0c;一旦掌…

【每日刷题】Day31

1. 2074. 反转偶数长度组的节点 - 力扣&#xff08;LeetCode&#xff09; //思路&#xff1a;双指针遍历。将链表存入数组中&#xff0c;通过双指针下标遍历定位需要反转的组。 typedef struct ListNode LN; void Reverse(int* arr,int left,int right)//反转函数 { while(left…

408数据结构-二叉树的概念、性质与存储结构 自学知识点整理

前置知识&#xff1a;树的基本概念与性质 二叉树的定义 二叉树是一种特殊的树形结构&#xff0c;其特点是每个结点至多只有两棵子树&#xff08;即二叉树中不存在度大于 2 2 2的结点&#xff09;&#xff0c;并且二叉树是有序树&#xff0c;左右子树不能互换。 与树类似&#…

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存

探索和构建 LLaMA 3 架构&#xff1a;深入探讨组件、编码和推理技术&#xff08;三&#xff09; KV缓存 在推理的每一步中&#xff0c;只对模型输出的最后一个标记感兴趣&#xff0c;因为已经有了之前的标记。然而&#xff0c;模型需要访问所有先前的标记来决定输出哪个标记&…

07 - 步骤 javaScript代码

简介 JavaScript 代码是通过 JavaScript 脚本步骤来执行 JavaScript 脚本的一种方式。这允许用户在 Kettle 的数据流程中使用 JavaScript 编写自定义的脚本逻辑&#xff0c;用于数据处理、转换、计算等操作。 使用 场景 我需要在数据流加一个字段 createTime 当前时间&…

java学习笔记12

21. System类和Runtime类 21.1 System类 System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,直接使用System类调用即可。System类的常用方法如下标所示: 方法名称功能描述static void exit(int status)终止jvm, status!=0表示异常终止jvmstatic vo…

《有限元分析及应用》《有限元分析基础教程》-曾攀-清华大学|pdf电子书+有限元分析及应用视频教程(全85讲) 曾攀、雷丽萍 ​​​+课件PPT

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

关于开源软件的影响力的探讨

开源软件的影响力 开源软件在软件开发领域中扮演着至关重要的角色&#xff0c;其影响力主要体现在以下几个方面&#xff1a; 开放源代码促进了全球开发者之间的协作和交流&#xff1a; 开源软件的源代码是公开可见的&#xff0c;这意味着任何人都可以查看、修改和分享代码。这…

找不到msvcr110.dll的多种解决方法,轻松解决dll问题

在日常使用计算机的时候&#xff0c;突然提示&#xff1a;“由于找不到msvcr110.dll&#xff0c;无法继续执行代码”。这个错误通常发生在运行某些程序时&#xff0c;系统无法找到所需的动态链接库文件。这个问题可能会给用户带来困扰&#xff0c;但是不用担心&#xff0c;下面…

Linux下运行jar包的方式

方式一&#xff1a;java -jar xx.jar 这样运行 java 程序遇到的问题就是&#xff0c;你不能在这个窗口进行其他操作&#xff0c;使用 CtrlC 就可以终止程序的执行&#xff0c;关闭 shell 窗口也会终止程序的执行。 方式二&#xff1a; java -jar XXX.jar & 关闭 xshell …