Python 类class的用法详解

Python 是一门支持面向对象编程的语言,类(class)是面向对象编程的基本概念之一。通过类,我们可以封装数据和方法,实现代码的模块化、可重用和可维护。本文将详细介绍 Python 中类的用法,包括类的定义、继承、多态以及一些高级特性。

类的定义与使用

在 Python 中,使用 class 关键字来定义一个类。类定义通常包括类变量、实例变量和方法。下面的例子展示了如何定义一个简单的 Person 类:

class Person:hair = 'black'  # 类变量def __init__(self, name, age):  # 构造方法self.name = name  # 实例变量self.age = agedef say(self, content):  # 实例方法print(content)

在上面的代码中,Person 类有一个类变量 hair,两个实例变量 name 和 age,以及一个实例方法 say。init 方法是一个特殊的方法,用于在创建对象时进行初始化操作。

我们可以这样使用 Person 类:

p = Person('Alice', 30)  # 创建 Person 对象
p.say('Hello, World!')  # 调用实例方法
print(p.name)  # 访问实例变量
print(Person.hair)  # 访问类变量

封装

封装是将数据和操作数据的方法绑定在一起,隐藏对象的内部状态和实现细节。在 Python 中,我们通常使用下划线和双下划线来标记保护(protected)和私有(private)的属性和方法。

class PrivateAttributes:def __init__(self):self._protected_attribute = "This is protected"self.__private_attribute = "This is private"def show_protected(self):print(self._protected_attribute)def __show_private(self):print(self.__private_attribute)

尽管 Python 没有强制私有性,但使用双下划线前缀会在内部对属性名称进行“名称重整”(namemangling),这增加了从类外部访问这些属性的难度。名称重整会将属性名转换为包含类名的形式,例如 _ClassName__private_attribute。

继承

继承允许我们定义一个类,从另一个类中继承属性和方法。被继承的类称为基类(父类),继承的类称为派生类(子类)。Python 支持单继承和多继承。

class Animal:def __init__(self, name):self.name = namedef speak(self):print(f'{self.name} makes a sound')class Dog(Animal):  # 单继承def __init__(self, name, breed):super().__init__(name)  # 调用基类的构造方法self.breed = breeddef speak(self):  # 方法重写print(f'{self.name} barks')class Cat(Animal):  # 单继承def speak(self):print(f'{self.name} meows')class Hybrid(Dog, Cat):  # 多继承pass

在上面的例子中,Dog 和 Cat 类都继承自 Animal 类,并且重写了 speak 方法。Hybrid 类同时继承了 Dog 和 Cat 类。

多态

多态是指允许不同类的对象对同一消息作出响应。在 Python 中,多态通常通过方法重写和方法重载来实现。

def make_sound(animal):animal.speak()dog = Dog('Rufus', 'Labrador')
cat = Cat('Whiskers')make_sound(dog)  # 输出: Rufus barks
make_sound(cat)  # 输出: Whiskers meows

抽象基类

抽象基类(Abstract Base Classes, ABCs)是 Python 中用于定义接口的机制。它们允许我们定义一些抽象方法,这些方法在子类中必须被实现。这有助于确保子类遵循特定的接口规范。

from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef area(self):pass@abstractmethoddef perimeter(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2def perimeter(self):return 2 * 3.14 * self.radius

在上面的例子中,Shape 类是一个抽象基类,定义了两个抽象方法 area 和 perimeter。Circle 类继承了 Shape 类,并实现了这两个抽象方法。

特殊方法

Python 中有一些特殊的方法,它们以双下划线开头和结尾,用于实现特定的功能,如构造方法 init、字符串表示方法 str 等。

class Game:def __init__(self, name):  # 构造方法self.name = namedef __str__(self):  # 字符串表示方法return f'This is a game named {self.name}'def start(self):print(f'Starting game: {self.name}')

总结

Python 的类提供了强大的面向对象编程能力,通过封装、继承、多态等特性,使得代码更加模块化、可重用和可维护。在实际开发中,合理设计类结构、利用特殊方法、装饰器以及元类等高级特性,可以写出高效、健壮的代码。随着 Python 生态的不断发展,越来越多的库和框架采用了面向对象的设计模式,掌握类的用法对于深入理解这些库和框架的工作原理、高效使用它们具有重要意义。

全文完!

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

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

相关文章

Graph Clustering和Community Detection(附代码) 图谱

本次我们聚焦算法的部分。这篇论文的算法之所以效果高于其他组别,核心思想就在于:1)从多个角度加权计算了用户之间的相似度;2)根据两两之间的相似度进行了Graph Clustering。最终的效果就是有相同偏好的用户被聚在了同一组,那么既然大家兴趣类似,你喜欢的自然大概率也是…

【Taro】初识 Taro

笔记来源:编程导航。 概述 Taro 官方文档:https://taro-docs.jd.com/docs/ (跨端开发框架) Taro 官方框架兼容的组件库: taro-ui:https://taro-ui.jd.com/#/ (最推荐,兼容性最好&…

组件封装有哪些注意事项—面试常问优美回答

组件封装有哪些注意事项—面试常问优美回答 关键点及回答建议与代码案例 组件设计原则 关键点:高内聚低耦合、接口清晰、职责单一。回答建议: “在设计组件时,我遵循高内聚低耦合的原则,确保组件内部逻辑紧密相关,同…

7.搭建个人金融数据库之快速获取股票列表和基本信息!

前边我们提过,免费的数据一般来自于爬虫,获取难度和维护成本都比较高,其实不太适合小白用户。所以非必要情况下,我们尽量不用这种方式来获取数据。 我自己用的比较多的是tushare,一般来说有它也就够了,大…

Python自动化-操作Excel

在数据处理和报表生成过程中,Excel是一个经常使用的工具。Python中的openpyxl库可以让您通过编程方式读取、写入和操作Excel文件,从而实现自动化的数据处理和报表生成。本文将介绍openpyxl库的基本用法和常见操作,帮助您快速上手使用Python处…

神经生物学精解【2】

文章目录 神经系统动物神经系统概述一、神经系统的基本组成二、神经系统的分类三、神经系统的功能四、神经系统的特殊能力 中枢神经系统组成一、中枢神经系统的构成1. 脑2. 脊髓 二、各部分功能、性质1. 大脑2. 间脑3. 小脑4. 脑干5. 脊髓 三、例题 神经系统可塑性一、定义与概…

猿大师办公助手在线编辑Office为什么要在客户端电脑安装插件微软Office或金山WPS?

猿大师办公助手作为一款专业级的网页编辑Office方案,与在线云文档方案(飞书、腾讯文档等)不同,需要在客户端电脑安装猿大师办公助手插件及微软Office或者金山WPS软件,很多客户不理解为什么要这么麻烦,能否客…

Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示

效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…

SQL Server全方位指南:从入门到高级详解

本文将分为三大部分&#xff0c;逐步深入SQL Server的基础知识、进阶技巧和高级特性&#xff0c;旨在帮助从初学者到经验丰富的开发人员深入理解和使用SQL Server。 一、入门篇 1.1 什么是SQL Server&#xff1f; SQL Server 是由微软开发的关系型数据库管理系统&#xff08…

VMWare虚拟机安装CentOS-7-x86_64-DVD-1611操作系统

VMWare虚拟机安装CentOS7操作系统 1、虚拟机准备打开VMware单机创建新的虚拟机典型与自定义安装选择虚拟机硬件兼容性选择安装程序光盘映射文件(iso)选择客户机操作系统命名虚拟机处理器配置内存配置网络连接类型I/O类型选择磁盘类型选择磁盘指定磁盘的最大磁盘大小磁盘名称我们…

ClickHouse在AI领域的结合应用

文章目录 引言1.1 人工智能与大数据的融合1.2 ClickHouse在大数据平台中的地位2.1 BI与AI的融合从传统BI到智能BIAI赋能BI融合的优势实际应用案例 2.2 异构数据处理的重要性数据多样性的挑战异构数据处理的需求技术实现实际应用案例 2.3 向量检索与AIOps技术向量检索的背景AIOp…

SpringBoot权限认证-Sa-Token的使用与详解

本文详细介绍了Sa-Token在Java项目中的使用方法&#xff0c;包括Sa-Token的基本概念、与其他权限框架的比较、基本语法和高级用法&#xff0c;并通过实例讲解了如何在项目中集成和使用Sa-Token。作为一款轻量级Java权限认证框架&#xff0c;Sa-Token在简化权限管理、提高开发效…

JS中的for...in和for...of有什么区别?

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 在 JavaScript 中&#xff0c;for...in 和 for...of 是两种用于遍历数组&#xff08;或其他可迭代对象&#xff09;的循环语句&#xff0c;但它们之间存在显著的差异。 一、遍历数组 for…in const arr …

[性能]高速收发的TCP/MQTT通信

Nagle算法‌是一种TCP/IP协议中的优化算法&#xff0c;旨在减少小数据包的数量&#xff0c;从而减少网络拥塞的可能性。该算法规定&#xff0c;在一个TCP连接上最多只能有一个未被确认的小分组。当数据被发送后&#xff0c;如果收到确认&#xff08;ACK&#xff09;之前&#x…

10 while和unitl循环结构语句

while和unitl循环结构语句 一、循环结构语句 ​ Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式&#xff0c;有三种常用的循环语句&#xff1a;for、while和until。while循环和for循环属于“当型循环”&#xff0c;而until属于“直到型循环”。 二、详解…

永磁电机和普通电机优缺点

永磁电机和普通电机&#xff08;如异步电机或同步电机&#xff09;各有优缺点&#xff0c;具体如下&#xff1a; 永磁电机 优点&#xff1a; 高效率&#xff1a;由于永磁体提供持续的磁场&#xff0c;永磁电机通常具有更高的效率。 体积小、重量轻&#xff1a;相对于功率&a…

JS实现数组去重常见方法

写在前面 今天在实现数组去重时&#xff0c;使用了多种方法实现。在此总结一下数组去重常见方法。 01_多重for循环去重 let arr [1, 2, 2, 3, 3, 1, 2] // 多层for循环去重 for (let i 0;i < arr.length;i) {for (let j i 1;j < arr.length;j) {if (arr[i] …

OpenCV绘制ROI区域(五)

鼠标绘制矩形 using OpenCvSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _01_绘制矩形 {internal class Program{//宏 常量public static string WINDOW_NAME "程序窗口&qu…

战神5/战神:诸神黄昏/God of War Ragnarok(容量175GB)百度网盘下载

版本介绍 v1.0.612.4312|容量175GB|官方简体中文|支持键盘.鼠标.手柄|赠单板学习补丁 配置要求 战神5/战神&#xff1a;诸神黄昏/God of War Ragnarok 游戏介绍 不灭的北欧传奇 由Santa Monica Studio出品、Jetpack Interactive负责PC移植的佳作《God of War Ragnark》将带您…

【原创】java+swing+mysql仓库管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片&#xff0c;希望和大家…