【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 = name
        self.age = age
        self.student_id = student_id

    def 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 = name
        self.species = species
    
    def __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.mfbz.cn/a/592053.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是PWM?

1.PWM也叫做脉冲宽度调制,它是一种模拟控制方式,根据相应 载荷 的变化来调制晶体管基级和MOS管栅极的偏置,来实现 晶体管 或 MOS管 导通时间的改变,从而实现开关稳压电源输出的改变。 这种方式能使电源的输出电压在工作条件变化时…

linux的基础入门(2)

环境变量 在Shell中,正确的赋值语法是没有空格的,即变量名数值。所以,正确的方式是: tmpshy 这样就将变量tmp赋值为"shy"了。 注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、…

Reac19 升级指南

Reactv19 已经发布 beta 版本,想要快速体验如何升级到 v19 版本尝鲜的朋友们可以查阅进行了解 前言 React 已于近日发布了 v19 的 beta 版本,同时为了帮助后续的 v19 升级,也同时发布了 v18.3.0的正式版, 与 v18.2 版本完全相同…

JavaEE初阶Day 15:文件IO(1)

目录 Day 15:文件IO(1)IO文件1. 路径2. 文件的分类3. 使用Java针对文件系统进行操作3.1 属性3.2 构造方法3.3 方法 Day 15:文件IO(1) IO I:Input输入 O:Output输出 输入输出规则…

【golang-ent】go-zero框架 整合 ent orm框架实现一对一 一对多 多种姿势查询方式

一、ent的 O2O 问题 官方文档如下: https://entgo.io/zh/docs/schema-edges#o2o-same-type 1、ent O2O问题 官方提供了三种 one2one的方式,可以看到他全部使用了 mysql的 foregionKey 的方式进行关联,虽然举例了单表和双表的不同使用方式,但是我们实际使用mysql中是不创建…

深度解析 Spring 源码:探寻Bean的生命周期

文章目录 一、 Bean生命周期概述二、Bean生命周期流程图三、Bean生命周期验证3.1 代码案例3.2 执行结果 四、Bean生命周期源码4.1 setBeanName()4.2 setBeanFactory()4.3 setApplicationContext()4.4 postProcessBeforeInitialization()4.5 afterPropertiesSet()4.6 postProces…

银行数字化转型导师坚鹏:银行数字化转型5大战略定位

银行数字化转型必须建立清晰的战略定位,可以从以下5个方面建立,使广大银行员工明白银行数字化转型的重要性。 1.国家战略落地的重要抓手 银行是中国金融体系的核心,银行是做好“科技金融、绿色金融、普惠金融、养老金融和数字金融‘五篇大文…

【c++】继承学习(二):探索 C++ 中派生类的默认机制与静态成员共享

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 目录 1.派生类的默认成员函数2.继承与友元3.继承与静态成员 朋友们大家好,本篇文章我们来学习继承的第二部分 1.派生类的默认成员函数 来看下面的类: class Person…

【自留】运行一个开源项目

运行一个开源项目 首先是运行起来 1. 拿到地址 拿到你想要的项目的地址 2. 克隆 打开编辑器 VSCode ,创建一个放项目的文件夹,控制台输入以下代码克隆项目 git clone 克隆地址gitee克隆地址在这看: github上项目的话,在这…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术,也被称为自动语音识别,目标是以电脑自动将…

SSM+Vue+小程序+基于微信小程序的高校学生事务管理系统

项目配合学校日常生活通知,考试等管理需要,开发学校事务管理系统,maven管理依赖,mybatis处理数据库交互 学校管理 学院管理 班级管理 年级管理 教师管理 通知公告管理 学生资料管理 待办事项管理 教务处通知管理 讲座通…

【Conda】解决无名虚拟环境问题

文章目录 问题描述:无名虚拟环境解决步骤1 添加虚拟环境目录到envs步骤2 成功命名 问题描述:无名虚拟环境 如果不指定创建目录,默认创建在C盘用户目录下,这应该是很多人不愿意的吧。 指定目录创建虚拟环境命令如下: …

vector的使用

1.构造函数 void test_vector1() {vector<int> v; //无参的构造函数vector<int> v2(10, 0);//n个value构造&#xff0c;初始化为10个0vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化vector<int> v4(v3); //拷贝…

基于yolov8的苹果腐败检测系统,系统既支持图像检测,也支持视频和摄像实时检测(pytorch框架)【python源码+UI界面+功能源码详解】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的苹果腐败检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的苹果腐败检测系统是在pytorc…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

Golang数组与切片

文章目录 数组数组介绍数组的定义方式访问与修改数组元素遍历数组元素数组指针 切片切片介绍切片的定义方式访问与修改切片元素添加切片元素切片的拷贝遍历切片元素string的切片 数组 数组介绍 数组介绍 在Go中&#xff0c;数组是一个由固定长度的特定类型元素组成的序列&…

[Algorithm][队列][宽搜BFS][N叉树的层序遍历][二叉树的锯齿形层序遍历][二叉树最大宽度][在每个树行中找最大值]详细讲解

目录 1.N 叉树的层序遍历1.题目链接2.算法思路详解3.代码实现 2.二叉树的锯齿形层序遍历1.题目链接2.算法原理详解3.代码实现 3.二叉树最大宽度1.题目链接2.算法原理详解3.代码实现 4.在每个树行中找最大值1.题目链接2.算法原理详解3.代码实现 1.N 叉树的层序遍历 1.题目链接 …

数据结构之链表深度讲解

小伙伴们&#xff0c;大家好呀&#xff0c;上次听我讲完顺序表想必收获不少吧&#xff0c;嘿嘿&#xff0c;这篇文章你也一样可以学到很多&#xff0c;系好安全带&#xff0c;咱们要发车了。 因为有了上一次顺序表的基础&#xff0c;所以这次我们直接进入正题&#xff0c;温馨…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…

【 书生·浦语大模型实战营】作业(六):Lagent AgentLego 智能体应用搭建

【 书生浦语大模型实战营】作业&#xff08;六&#xff09;&#xff1a;Lagent & AgentLego 智能体应用搭建 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方…
最新文章