Python的class到底怎么用?从定义到继承、封装、多态,一整套机制是怎么协同工作的?

Python 中的 `class`(类)是面向对象编程的核心概念,用于创建具有特定属性和行为的对象蓝图。类的使用可以提高代码的复用性、组织性和可维护性。以下将从类的定义、构造函数、属性和方法、继承、多态等核心方面进行详细介绍,并结合代码示例说明 [ref_1][ref_2][ref_4]。 ### 1. 类的定义与基本结构 类通过 `class` 关键字定义,其后跟类名(通常采用大驼峰命名法)和冒号。类体中可以定义属性和方法。 ```python # 定义一个简单的 Person 类 class Person: # 类属性(所有实例共享) species = 'human' # 实例方法(第一个参数为 self,代表实例本身) def introduce(self): return f"Hello, I am a {self.species}." # 创建类的实例(对象) p1 = Person() print(p1.introduce()) # 输出:Hello, I am a human. ``` ### 2. 构造函数 `__init__` 与实例属性 `__init__` 方法是类的构造函数,在创建新实例时自动调用,用于初始化实例的属性(即实例属性)[ref_1][ref_4]。`self` 参数指向实例本身。 ```python class Person: def __init__(self, name, age): # 初始化实例属性 self.name = name # 实例属性 self.age = age def introduce(self): return f"My name is {self.name}, I'm {self.age} years old." # 创建实例并传入初始化参数 p1 = Person("Alice", 25) print(p1.introduce()) # 输出:My name is Alice, I'm 25 years old. ``` ### 3. 类属性、实例属性与方法 | 类型 | 定义位置 | 访问方式 | 描述 | | :--- | :--- | :--- | :--- | | **类属性** | 类体中,所有方法外 | `类名.属性` 或 `实例.属性` | 所有实例共享,通常用于定义常量或共享状态 [ref_1]。 | | **实例属性** | 通常在 `__init__` 方法中定义 | `实例.属性` | 每个实例独有的数据。 | | **实例方法** | 类体中,第一个参数为 `self` | `实例.方法()` | 操作实例属性和类属性。 | | **类方法** | 使用 `@classmethod` 装饰器,第一个参数为 `cls` | `类名.方法()` 或 `实例.方法()` | 操作类属性,不能访问实例属性 [ref_4]。 | | **静态方法** | 使用 `@staticmethod` 装饰器,无 `self` 或 `cls` 参数 | `类名.方法()` 或 `实例.方法()` | 与类和实例状态无关的工具函数 [ref_4]。 | ```python class Calculator: # 类属性 manufacturer = "TechCorp" def __init__(self, model): self.model = model # 实例属性 # 实例方法 def add(self, a, b): return a + b # 类方法 @classmethod def get_manufacturer(cls): return cls.manufacturer # 静态方法 @staticmethod def multiply(a, b): return a * b # 使用 calc = Calculator("Calc-2000") print(calc.add(5, 3)) # 实例方法:输出 8 print(Calculator.get_manufacturer()) # 类方法:输出 "TechCorp" print(Calculator.multiply(5, 3)) # 静态方法:输出 15 ``` ### 4. 封装与访问控制 封装是指隐藏对象的内部实现细节,仅对外暴露公共接口。Python 通过名称改写实现“私有”属性/方法,在属性名或方法名前加双下划线 `__` 即可 [ref_4][ref_6]。 ```python class BankAccount: def __init__(self, owner, balance): self.owner = owner # 公有属性 self.__balance = balance # 私有属性(实际被重命名为 _BankAccount__balance) # 公有方法作为访问接口 def deposit(self, amount): if amount > 0: self.__balance += amount return True return False def get_balance(self): return self.__balance # 通过公有方法访问私有属性 # 使用 account = BankAccount("Bob", 1000) account.deposit(500) print(account.get_balance()) # 输出:1500 # print(account.__balance) # 报错:AttributeError,无法直接访问私有属性 # print(account._BankAccount__balance) # 可以访问,但不推荐 ``` ### 5. 继承 继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展 [ref_1][ref_2][ref_3]。 #### 5.1 单继承 ```python # 父类 class Animal: def __init__(self, name): self.name = name def speak(self): return f"{self.name} makes a sound." # 子类 class Dog(Animal): # Dog 类继承自 Animal 类 def __init__(self, name, breed): # 调用父类的 __init__ 方法初始化继承的属性 super().__init__(name) self.breed = breed # 方法重写(Override):覆盖父类的 speak 方法 def speak(self): return f"{self.name} (a {self.breed} dog) says: Woof!" # 使用 dog = Dog("Buddy", "Golden Retriever") print(dog.speak()) # 输出:Buddy (a Golden Retriever dog) says: Woof! ``` #### 5.2 多重继承 Python 支持一个子类继承多个父类 [ref_2][ref_3]。当多个父类有同名方法或属性时,Python 会按照 **方法解析顺序** 进行查找,可以通过 `类名.__mro__` 属性查看。 ```python class Flyable: def fly(self): return "I can fly!" class Swimmable: def swim(self): return "I can swim!" class Duck(Flyable, Swimmable): # 多重继承 def speak(self): return "Quack!" duck = Duck() print(duck.fly()) # 输出:I can fly! print(duck.swim()) # 输出:I can swim! print(duck.speak()) # 输出:Quack! print(Duck.__mro__) # 查看方法解析顺序 ``` ### 6. 多态 多态是指同一个接口(如方法名)在不同的对象(类)中具有不同的行为。Python 的多态是“鸭子类型”的体现,只要对象具有相应的方法,就可以被调用,而不强制要求继承关系 [ref_2][ref_5][ref_6]。 ```python # 定义具有相同接口的不同类 class Cat: def speak(self): return "Meow!" class Car: def speak(self): # 即使Car不是动物,只要有speak方法,就可被多态调用 return "Vroom!" # 多态函数 def make_it_talk(entity): return entity.speak() # 使用 animals = [Cat(), Car()] for obj in animals: print(make_it_talk(obj)) # 输出: # Meow! # Vroom! ``` ### 7. 特殊方法(魔术方法) 特殊方法以双下划线开头和结尾,用于实现类的特定行为,如运算符重载、对象字符串表示等 [ref_1]。 ```python class Vector2D: def __init__(self, x, y): self.x = x self.y = y # 重载加法运算符 def __add__(self, other): return Vector2D(self.x + other.x, self.y + other.y) # 定义对象的字符串表示 def __str__(self): return f"Vector2D({self.x}, {self.y})" # 定义对象的“官方”字符串表示(用于调试) def __repr__(self): return f"Vector2D({self.x}, {self.y})" # 使用 v1 = Vector2D(1, 2) v2 = Vector2D(3, 4) v3 = v1 + v2 # 调用 __add__ print(v3) # 调用 __str__,输出:Vector2D(4, 6) ``` ### 8. 抽象基类与抽象方法 抽象基类定义了接口规范,不能实例化,其抽象方法必须由子类实现。这体现了面向对象编程中的“数据抽象”思想 [ref_5]。 ```python from abc import ABC, abstractmethod # 抽象基类 class Shape(ABC): @abstractmethod def area(self): pass # 子类必须实现此方法 @abstractmethod def perimeter(self): pass # 具体子类 class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width + self.height) # 使用 rect = Rectangle(5, 3) print(f"Area: {rect.area()}") # 输出:Area: 15 print(f"Perimeter: {rect.perimeter()}") # 输出:Perimeter: 16 # shape = Shape() # 报错:无法实例化抽象类 ``` ### 9. 类与实例的内置属性和方法 Python 类本身也是对象,具有一些内置属性和方法 [ref_1]。 * `__dict__`:存储对象(类或实例)属性的字典。 * `__class__`:获取对象的类。 * `isinstance(obj, Class)`:检查对象是否为某类或其子类的实例。 * `issubclass(SubClass, BaseClass)`:检查一个类是否为另一个类的子类。 ```python class MyClass: pass obj = MyClass() print(obj.__class__) # 输出:<class '__main__.MyClass'> print(MyClass.__dict__.keys()) # 查看类的属性 print(isinstance(obj, MyClass)) # 输出:True ``` 综上,Python 的 `class` 机制完整支持了面向对象编程的三大特性:**封装**(通过私有属性和公共方法)、**继承**(单继承、多重继承)和**多态**(通过方法重写和鸭子类型)。同时,特殊方法和抽象基类等特性进一步增强了其表达能力和设计模式的实现能力 [ref_1][ref_5][ref_6]。理解并熟练运用这些概念,是编写高质量、可维护 Python 代码的关键。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

含混合式抽水蓄能梯级水电的源网荷储日前协同调度优化研究(Matlab代码实现)

含混合式抽水蓄能梯级水电的源网荷储日前协同调度优化研究(Matlab代码实现)

内容概要:本文围绕“含混合式抽水蓄能梯级水电的源网荷储日前协同调度优化”展开,重点介绍了基于Matlab代码实现的多场景电力系统优化模型,涵盖源网荷储协同调度、综合能源系统多时间尺度优化、电动汽车与储能协同调度、微电网协调运行等核心内容。研究融合了智能优化算法(如灰狼算法GWO)、二阶锥规划(SOCP)、需求响应建模、混合储能功率分配、虚拟电厂博弈策略等关键技术,旨在提升新能源消纳能力、系统灵活性与运行经济性。文中还列举了大量相关课题,包括光伏-储能系统仿真、电力系统稳定性分析、路径规划、信号处理及机器学习在能源领域的应用,充分展示了Matlab/Simulink在科研仿真中的强大功能与广泛应用前景。; 适合人群:具备一定电力系统、自动化或计算机背景,从事能源互联网、智能电网、综合能源系统方向研究的硕士/博士研究生及科研人员。; 使用场景及目标:①开展含高比例可再生能源的源网荷储协同调度研究;②构建微电网、虚拟电厂、多能互补系统的优化模型;③学习并应用智能优化算法(如GWO、PSO)与数学规划方法(如SOCP)解决实际工程问题;④掌握Matlab/Simulink在电力电子、控制策略、仿真建模方面的实践技能。; 阅读建议:此资源集合了丰富的科研案例与代码实现,建议读者结合自身研究方向,选取对应模块进行复现与学习。在阅读时应重点关注模型构建思路、目标函数设计、约束条件设定及算法实现细节,并充分利用提供的网盘资源进行代码调试与仿真验证,以深化对理论知识的理解与应用能力。

cypress:一款高效的前端测试工具

cypress:一款高效的前端测试工具

快速、简便且可靠地测试任何在浏览器中运行的程序

高校技术转移办公室人员如何通过图谱提升科研成果的市场转化率?.docx

高校技术转移办公室人员如何通过图谱提升科研成果的市场转化率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

仓颉智能体DSL契约例外策略工具|原创源码+测试+离线报告

仓颉智能体DSL契约例外策略工具|原创源码+测试+离线报告

原创可运行的工程审计与分析工具合集中的独立项目。每个压缩包包含完整 Node.js、HTML、CSS、JavaScript 源码,内置合成示例、3 项自动化验收、离线 HTML/JSON/SVG 报告、1080×720 运行效果图、README、运行说明、MIT License 与原创授权声明。零第三方运行依赖,不包含榜单产品源码、官方素材、论文、账号数据或未授权内容。适合 AI 工程、前端、运维和质量团队用于本地预检、教学演示与二次开发。运行方法:Node.js 18+ 下执行 npm test 与 npm run report,或启动静态服务器打开 index.html。

国央企如何制定科学的企业创新战略和技术布局?.docx

国央企如何制定科学的企业创新战略和技术布局?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

【计算机硬件标准】PCI总线设备分类与能力标识规范:Class Code及Capability ID编码体系定义

【计算机硬件标准】PCI总线设备分类与能力标识规范:Class Code及Capability ID编码体系定义

内容概要:本文档为PCI-SIG发布的《PCI Code and ID Assignment Specification》第1.13版(2020年7月更新),旨在统一并规范PCI设备的类代码(Class Code)、能力标识(Capability ID)及扩展能力标识(Extended Capability ID)的分配标准。文档详细定义了各类设备的功能分类编码,包括存储控制器、网络控制器、显示设备、串行总线控制器等,并涵盖最新的技术扩展,如USB4、NVMe、CXL内存设备、PCIe 32.0 GT/s物理层、数据对象交换(DOE)等功能的支持。此外,文档还引入了新的扩展能力ID,如Device 3 Extended Capability、CXL子类与编程接口以及PCI-

最新全国行政区域编码及mysql数据库(省/市/区县)+拼音+经纬度

最新全国行政区域编码及mysql数据库(省/市/区县)+拼音+经纬度

省市区县数据根据民政部【行政区划代码】,结合地图经纬度,整理完成。 1.全国行政区域代码,总计:3349条;更新维护至2026-7-31 2.包括省份(直辖市)、城市、区县、三级的行政区划代码,拼音,经纬度

政府科技管理部门在推动区域创新平台建设时,如何精准识别合作主体与资源配置方向?.docx

政府科技管理部门在推动区域创新平台建设时,如何精准识别合作主体与资源配置方向?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

Delphi 13.1控件之DevExpressUnidacServerMode.7z

Delphi 13.1控件之DevExpressUnidacServerMode.7z

Delphi 13.1控件之DevExpressUnidacServerMode.7z

基于SpringBoot的高校招采购系统的设计与实现源码

基于SpringBoot的高校招采购系统的设计与实现源码

本系统结合当前高校招标采购中存在的问题和现状,利用信息化的管理手段实现一套以招标为主的的管理系统。采用Springboot框架技术、Java语言,以及Eclipse开发平台MySQL数据库技术来完成。在系统中供应商用户可以先注册登录,然后选择招标信息进行投标,并可以留言咨询。可以查看最后的中标结果公告。管理员端主要可以完成招标信息的发布、管理和审批,合同的添加和查看,以及留言和新闻通知的管理,还可以进行供应商中标信息的数据统计。

如何利用知识图谱进行跨区域创新合作的匹配?.docx

如何利用知识图谱进行跨区域创新合作的匹配?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

【博士论文复现】光伏并网逆变器序阻抗建模、扫频辨识与弱电网交互稳定性分析【阻抗建模、验证扫频法】(Matlab代码、Simulink仿真实现)

【博士论文复现】光伏并网逆变器序阻抗建模、扫频辨识与弱电网交互稳定性分析【阻抗建模、验证扫频法】(Matlab代码、Simulink仿真实现)

内容概要:本文档聚焦于“光伏并网逆变器序阻抗建模、扫频辨识与弱电网交互稳定性分析”这一核心课题,系统复现了博士论文中的关键技术环节。内容涵盖基于谐波线性化的正负序阻抗建模理论,通过Matlab代码与Simulink仿真实现扫频法对系统频率响应的辨识,并深入探讨并网逆变器在弱电网条件下的交互稳定性问题。资源不仅包含光伏并网逆变器,还扩展至虚拟同步发电机(VSG)、三电平逆变器等多种系统,集成SVPWM、DPWMA调制、虚拟阻抗、统一有源阻尼、前馈控制等先进控制策略,旨在帮助研究人员全面掌握并网系统在复杂电网环境下的动态特性与稳定性分析方法。; 适合人群:适用于具备电力电子、自动控制或新能源并网等相关专业背景的研究生、科研人员及工程技术人员,尤其适合已熟悉Matlab/Simulink仿真环境并希望深入探究并网系统稳定性的从业者。; 使用场景及目标:① 深入学习并掌握基于谐波线性化的光伏并网逆变器正负序阻抗建模方法;② 实践扫频辨识技术,获取并分析系统频率响应特性;③ 探究并网系统与弱电网之间的交互作用机制,评估其稳定性;④ 复现高水平学术论文(如博士论文)中的关键算法与仿真模型,服务于科研创新、项目开发与学术研究。; 阅读建议:建议结合所提供的完整Matlab代码与Simulink仿真模型进行逐步操作,重点关注阻抗建模的理论推导与仿真参数设置之间的对应关系,通过调试不同工况下的扫频结果,深化对系统稳定性判据的理解,并可进一步将所学方法扩展应用于VSG、多电平逆变器等前沿控制策略的稳定性分析研究。

未发表的原创模型!三类典型需求响应负荷的标准化建模+共享储能提升灵活性(Matlab代码实现)

未发表的原创模型!三类典型需求响应负荷的标准化建模+共享储能提升灵活性(Matlab代码实现)

内容概要:本文提出了一种未发表的原创模型,聚焦于三类典型需求响应负荷的标准化建模,并引入共享储能机制以提升电力系统的灵活性。该研究通过Matlab代码实现,旨在对需求侧资源进行规范化建模,从而优化能源调度与系统运行效率。模型重点探讨了综合能源系统中共享储能在应对负荷波动、提高可再生能源消纳能力以及改善系统经济性与可靠性方面的作用。研究内容包括负荷特性分析、数学建模、优化求解与仿真验证,适用于电力系统优化调度、需求侧管理及多能协同等领域。; 适合人群:具备一定电力系统、自动化或相关专业背景,熟悉Matlab编程,从事科研或工程应用的研究生、科研人员及技术人员。; 使用场景及目标:① 为不同类型的需求响应负荷提供标准化建模范例,便于跨场景推广与对比分析;② 探索共享储能提升系统灵活性的技术路径,支撑综合能源系统在多时间尺度下的优化调度;③ 借助Matlab代码实现仿真验证与二次开发,服务于科研复现与实际工程项目应用。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型假设与边界条件,深入理解其在不同电力系统场景下的适用性与局限性,并可进一步拓展至多能互补、碳排放约束等综合优化问题的研究中。

【计算机硬件】PCI规范中的类代码与能力标识:设备功能分类及扩展能力ID分配标准

【计算机硬件】PCI规范中的类代码与能力标识:设备功能分类及扩展能力ID分配标准

内容概要:本文档《PCI Code and ID Assignment Specification Revision 1.7》由PCI-SIG发布,定义了PCI设备的类代码(Class Codes)、能力标识(Capability IDs)和扩展能力标识(Extended Capability IDs)的标准编码规范。文档详细列出了各类设备的功能分类,包括存储控制器、网络控制器、显示控制器、多媒体设备、桥接设备、系统外设等,并对每个类别的子类和编程接口进行了明确说明。同时,文档还规定了标准与扩展能力结构的ID分配,支持PCI E

政府科技管理者如何精准识别区域创新短板以制定针对性政策?.docx

政府科技管理者如何精准识别区域创新短板以制定针对性政策?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

利用MATLAB(Runge-Kutta方法)对带电粒子轨迹在电磁场中的数值模拟。.zip

利用MATLAB(Runge-Kutta方法)对带电粒子轨迹在电磁场中的数值模拟。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

产业园区运营负责人如何利用知识图谱推动企业精准对接与资源互补?.docx

产业园区运营负责人如何利用知识图谱推动企业精准对接与资源互补?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

GEO源码AI优化排名GEO分站系统

GEO源码AI优化排名GEO分站系统

【功能新增】 1. 后台支持自定义配置三方媒体渠道 2. 支持自主适配、配置 B2B 相关业务 【体验优化】 1. 优化文章插入图片相关问题 2. 优化左侧菜单栏展示与交互

政府科技管理者在制定区域创新政策时,如何精准识别创新短板与优势领域?.docx

政府科技管理者在制定区域创新政策时,如何精准识别创新短板与优势领域?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

前端插件 chrome vue3调试 new-chat-2-source-and-bundle-20260807-101614.zip

前端插件 chrome vue3调试 new-chat-2-source-and-bundle-20260807-101614.zip

前端插件 chrome vue3调试 new-chat-2-source-and-bundle-20260807-101614.zip