📌目录
- [⚖️ 类和实例:面向对象的核心概念](#⚖️ 类和实例:面向对象的核心概念)
-
- [🎯 一、类概述](#🎯 一、类概述)
- [📦 二、类的组成](#📦 二、类的组成)
- [🌐 三、类的类型](#🌐 三、类的类型)
- [💡 四、实例概述](#💡 四、实例概述)
- [📊 五、类与实例的关系](#📊 五、类与实例的关系)
- [📋 六、类的设计原则](#📋 六、类的设计原则)
- [📝 七、类和实例的应用](#📝 七、类和实例的应用)
- [📝 总结](#📝 总结)

⚖️ 类和实例:面向对象的核心概念
类(Class)和实例(Instance)是面向对象技术的核心概念。类是对象的模板,实例是类的具体化。本文将详细介绍类和实例的概念、组成、关系以及设计原则。

🎯 一、类概述
(一)类的定义
类是对象的模板,定义了对象的属性和方法,是一组具有相同属性和行为的对象的抽象。
类概念:
#mermaid-svg-EUFg0SW1XdIjHUY9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EUFg0SW1XdIjHUY9 .error-icon{fill:#552222;}#mermaid-svg-EUFg0SW1XdIjHUY9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EUFg0SW1XdIjHUY9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .marker.cross{stroke:#333333;}#mermaid-svg-EUFg0SW1XdIjHUY9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EUFg0SW1XdIjHUY9 p{margin:0;}#mermaid-svg-EUFg0SW1XdIjHUY9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .cluster-label text{fill:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .cluster-label span{color:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .cluster-label span p{background-color:transparent;}#mermaid-svg-EUFg0SW1XdIjHUY9 .label text,#mermaid-svg-EUFg0SW1XdIjHUY9 span{fill:#333;color:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .node rect,#mermaid-svg-EUFg0SW1XdIjHUY9 .node circle,#mermaid-svg-EUFg0SW1XdIjHUY9 .node ellipse,#mermaid-svg-EUFg0SW1XdIjHUY9 .node polygon,#mermaid-svg-EUFg0SW1XdIjHUY9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .rough-node .label text,#mermaid-svg-EUFg0SW1XdIjHUY9 .node .label text,#mermaid-svg-EUFg0SW1XdIjHUY9 .image-shape .label,#mermaid-svg-EUFg0SW1XdIjHUY9 .icon-shape .label{text-anchor:middle;}#mermaid-svg-EUFg0SW1XdIjHUY9 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .rough-node .label,#mermaid-svg-EUFg0SW1XdIjHUY9 .node .label,#mermaid-svg-EUFg0SW1XdIjHUY9 .image-shape .label,#mermaid-svg-EUFg0SW1XdIjHUY9 .icon-shape .label{text-align:center;}#mermaid-svg-EUFg0SW1XdIjHUY9 .node.clickable{cursor:pointer;}#mermaid-svg-EUFg0SW1XdIjHUY9 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .arrowheadPath{fill:#333333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EUFg0SW1XdIjHUY9 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EUFg0SW1XdIjHUY9 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EUFg0SW1XdIjHUY9 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EUFg0SW1XdIjHUY9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .cluster text{fill:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 .cluster span{color:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EUFg0SW1XdIjHUY9 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EUFg0SW1XdIjHUY9 rect.text{fill:none;stroke-width:0;}#mermaid-svg-EUFg0SW1XdIjHUY9 .icon-shape,#mermaid-svg-EUFg0SW1XdIjHUY9 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EUFg0SW1XdIjHUY9 .icon-shape p,#mermaid-svg-EUFg0SW1XdIjHUY9 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EUFg0SW1XdIjHUY9 .icon-shape .label rect,#mermaid-svg-EUFg0SW1XdIjHUY9 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EUFg0SW1XdIjHUY9 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EUFg0SW1XdIjHUY9 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EUFg0SW1XdIjHUY9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 类
模板
抽象
定义
创建对象
抽取共性
定义属性和方法
(二)类的本质
类本质:
类是对现实世界实体的抽象,提取了实体的共同特征和行为。
类本质:
#mermaid-svg-CGIt30o4gGWEvof3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CGIt30o4gGWEvof3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CGIt30o4gGWEvof3 .error-icon{fill:#552222;}#mermaid-svg-CGIt30o4gGWEvof3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CGIt30o4gGWEvof3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CGIt30o4gGWEvof3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CGIt30o4gGWEvof3 .marker.cross{stroke:#333333;}#mermaid-svg-CGIt30o4gGWEvof3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CGIt30o4gGWEvof3 p{margin:0;}#mermaid-svg-CGIt30o4gGWEvof3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CGIt30o4gGWEvof3 .cluster-label text{fill:#333;}#mermaid-svg-CGIt30o4gGWEvof3 .cluster-label span{color:#333;}#mermaid-svg-CGIt30o4gGWEvof3 .cluster-label span p{background-color:transparent;}#mermaid-svg-CGIt30o4gGWEvof3 .label text,#mermaid-svg-CGIt30o4gGWEvof3 span{fill:#333;color:#333;}#mermaid-svg-CGIt30o4gGWEvof3 .node rect,#mermaid-svg-CGIt30o4gGWEvof3 .node circle,#mermaid-svg-CGIt30o4gGWEvof3 .node ellipse,#mermaid-svg-CGIt30o4gGWEvof3 .node polygon,#mermaid-svg-CGIt30o4gGWEvof3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CGIt30o4gGWEvof3 .rough-node .label text,#mermaid-svg-CGIt30o4gGWEvof3 .node .label text,#mermaid-svg-CGIt30o4gGWEvof3 .image-shape .label,#mermaid-svg-CGIt30o4gGWEvof3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-CGIt30o4gGWEvof3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CGIt30o4gGWEvof3 .rough-node .label,#mermaid-svg-CGIt30o4gGWEvof3 .node .label,#mermaid-svg-CGIt30o4gGWEvof3 .image-shape .label,#mermaid-svg-CGIt30o4gGWEvof3 .icon-shape .label{text-align:center;}#mermaid-svg-CGIt30o4gGWEvof3 .node.clickable{cursor:pointer;}#mermaid-svg-CGIt30o4gGWEvof3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CGIt30o4gGWEvof3 .arrowheadPath{fill:#333333;}#mermaid-svg-CGIt30o4gGWEvof3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CGIt30o4gGWEvof3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CGIt30o4gGWEvof3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CGIt30o4gGWEvof3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CGIt30o4gGWEvof3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CGIt30o4gGWEvof3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CGIt30o4gGWEvof3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CGIt30o4gGWEvof3 .cluster text{fill:#333;}#mermaid-svg-CGIt30o4gGWEvof3 .cluster span{color:#333;}#mermaid-svg-CGIt30o4gGWEvof3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CGIt30o4gGWEvof3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CGIt30o4gGWEvof3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-CGIt30o4gGWEvof3 .icon-shape,#mermaid-svg-CGIt30o4gGWEvof3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CGIt30o4gGWEvof3 .icon-shape p,#mermaid-svg-CGIt30o4gGWEvof3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CGIt30o4gGWEvof3 .icon-shape .label rect,#mermaid-svg-CGIt30o4gGWEvof3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CGIt30o4gGWEvof3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CGIt30o4gGWEvof3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CGIt30o4gGWEvof3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 现实世界实体
抽象
提取共性
定义类
属性
方法
共同特征
共同行为
(三)类的特点
类特点:
| 特点 | 说明 |
|---|---|
| 抽象性 | 抽取共同特征 |
| 模板性 | 创建对象的模板 |
| 封装性 | 封装属性和方法 |
| 继承性 | 支持继承机制 |
| 多态性 | 支持多态机制 |
📦 二、类的组成
(一)类的组成要素
组成要素:
#mermaid-svg-vXdXaiqPZ2SixiYP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vXdXaiqPZ2SixiYP .error-icon{fill:#552222;}#mermaid-svg-vXdXaiqPZ2SixiYP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vXdXaiqPZ2SixiYP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vXdXaiqPZ2SixiYP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vXdXaiqPZ2SixiYP .marker.cross{stroke:#333333;}#mermaid-svg-vXdXaiqPZ2SixiYP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vXdXaiqPZ2SixiYP p{margin:0;}#mermaid-svg-vXdXaiqPZ2SixiYP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP .cluster-label text{fill:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP .cluster-label span{color:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP .cluster-label span p{background-color:transparent;}#mermaid-svg-vXdXaiqPZ2SixiYP .label text,#mermaid-svg-vXdXaiqPZ2SixiYP span{fill:#333;color:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP .node rect,#mermaid-svg-vXdXaiqPZ2SixiYP .node circle,#mermaid-svg-vXdXaiqPZ2SixiYP .node ellipse,#mermaid-svg-vXdXaiqPZ2SixiYP .node polygon,#mermaid-svg-vXdXaiqPZ2SixiYP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vXdXaiqPZ2SixiYP .rough-node .label text,#mermaid-svg-vXdXaiqPZ2SixiYP .node .label text,#mermaid-svg-vXdXaiqPZ2SixiYP .image-shape .label,#mermaid-svg-vXdXaiqPZ2SixiYP .icon-shape .label{text-anchor:middle;}#mermaid-svg-vXdXaiqPZ2SixiYP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vXdXaiqPZ2SixiYP .rough-node .label,#mermaid-svg-vXdXaiqPZ2SixiYP .node .label,#mermaid-svg-vXdXaiqPZ2SixiYP .image-shape .label,#mermaid-svg-vXdXaiqPZ2SixiYP .icon-shape .label{text-align:center;}#mermaid-svg-vXdXaiqPZ2SixiYP .node.clickable{cursor:pointer;}#mermaid-svg-vXdXaiqPZ2SixiYP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vXdXaiqPZ2SixiYP .arrowheadPath{fill:#333333;}#mermaid-svg-vXdXaiqPZ2SixiYP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vXdXaiqPZ2SixiYP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vXdXaiqPZ2SixiYP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vXdXaiqPZ2SixiYP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vXdXaiqPZ2SixiYP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vXdXaiqPZ2SixiYP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vXdXaiqPZ2SixiYP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vXdXaiqPZ2SixiYP .cluster text{fill:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP .cluster span{color:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vXdXaiqPZ2SixiYP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vXdXaiqPZ2SixiYP rect.text{fill:none;stroke-width:0;}#mermaid-svg-vXdXaiqPZ2SixiYP .icon-shape,#mermaid-svg-vXdXaiqPZ2SixiYP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vXdXaiqPZ2SixiYP .icon-shape p,#mermaid-svg-vXdXaiqPZ2SixiYP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vXdXaiqPZ2SixiYP .icon-shape .label rect,#mermaid-svg-vXdXaiqPZ2SixiYP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vXdXaiqPZ2SixiYP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vXdXaiqPZ2SixiYP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vXdXaiqPZ2SixiYP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 类组成
属性
方法
构造函数
析构函数
数据成员
操作方法
初始化
清理资源
(二)属性
属性是类的数据成员,描述类的特征。
属性概念:
#mermaid-svg-LcS1M9KhxbTUMNQa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LcS1M9KhxbTUMNQa .error-icon{fill:#552222;}#mermaid-svg-LcS1M9KhxbTUMNQa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LcS1M9KhxbTUMNQa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LcS1M9KhxbTUMNQa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LcS1M9KhxbTUMNQa .marker.cross{stroke:#333333;}#mermaid-svg-LcS1M9KhxbTUMNQa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LcS1M9KhxbTUMNQa p{margin:0;}#mermaid-svg-LcS1M9KhxbTUMNQa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa .cluster-label text{fill:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa .cluster-label span{color:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa .cluster-label span p{background-color:transparent;}#mermaid-svg-LcS1M9KhxbTUMNQa .label text,#mermaid-svg-LcS1M9KhxbTUMNQa span{fill:#333;color:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa .node rect,#mermaid-svg-LcS1M9KhxbTUMNQa .node circle,#mermaid-svg-LcS1M9KhxbTUMNQa .node ellipse,#mermaid-svg-LcS1M9KhxbTUMNQa .node polygon,#mermaid-svg-LcS1M9KhxbTUMNQa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LcS1M9KhxbTUMNQa .rough-node .label text,#mermaid-svg-LcS1M9KhxbTUMNQa .node .label text,#mermaid-svg-LcS1M9KhxbTUMNQa .image-shape .label,#mermaid-svg-LcS1M9KhxbTUMNQa .icon-shape .label{text-anchor:middle;}#mermaid-svg-LcS1M9KhxbTUMNQa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LcS1M9KhxbTUMNQa .rough-node .label,#mermaid-svg-LcS1M9KhxbTUMNQa .node .label,#mermaid-svg-LcS1M9KhxbTUMNQa .image-shape .label,#mermaid-svg-LcS1M9KhxbTUMNQa .icon-shape .label{text-align:center;}#mermaid-svg-LcS1M9KhxbTUMNQa .node.clickable{cursor:pointer;}#mermaid-svg-LcS1M9KhxbTUMNQa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LcS1M9KhxbTUMNQa .arrowheadPath{fill:#333333;}#mermaid-svg-LcS1M9KhxbTUMNQa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LcS1M9KhxbTUMNQa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LcS1M9KhxbTUMNQa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LcS1M9KhxbTUMNQa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LcS1M9KhxbTUMNQa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LcS1M9KhxbTUMNQa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LcS1M9KhxbTUMNQa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LcS1M9KhxbTUMNQa .cluster text{fill:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa .cluster span{color:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LcS1M9KhxbTUMNQa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LcS1M9KhxbTUMNQa rect.text{fill:none;stroke-width:0;}#mermaid-svg-LcS1M9KhxbTUMNQa .icon-shape,#mermaid-svg-LcS1M9KhxbTUMNQa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LcS1M9KhxbTUMNQa .icon-shape p,#mermaid-svg-LcS1M9KhxbTUMNQa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LcS1M9KhxbTUMNQa .icon-shape .label rect,#mermaid-svg-LcS1M9KhxbTUMNQa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LcS1M9KhxbTUMNQa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LcS1M9KhxbTUMNQa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LcS1M9KhxbTUMNQa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 属性
类属性
实例属性
所有对象共享
每个对象独立
属性示例:
python
class Student:
# 类属性(所有对象共享)
school = "清华大学"
count = 0
def __init__(self, name, age):
# 实例属性(每个对象独立)
self.name = name
self.age = age
Student.count += 1 # 修改类属性
# 创建对象
student1 = Student("张三", 20)
student2 = Student("李四", 21)
# 访问属性
print(student1.school) # 输出:清华大学
print(student2.school) # 输出:清华大学
print(Student.school) # 输出:清华大学
print(student1.name) # 输出:张三
print(student2.name) # 输出:李四
print(Student.count) # 输出:2
(三)方法
方法是类的操作行为,描述类能做什么。
方法概念:
#mermaid-svg-8IE5mqxkbfDMs3vQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8IE5mqxkbfDMs3vQ .error-icon{fill:#552222;}#mermaid-svg-8IE5mqxkbfDMs3vQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8IE5mqxkbfDMs3vQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .marker.cross{stroke:#333333;}#mermaid-svg-8IE5mqxkbfDMs3vQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8IE5mqxkbfDMs3vQ p{margin:0;}#mermaid-svg-8IE5mqxkbfDMs3vQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .cluster-label text{fill:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .cluster-label span{color:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .cluster-label span p{background-color:transparent;}#mermaid-svg-8IE5mqxkbfDMs3vQ .label text,#mermaid-svg-8IE5mqxkbfDMs3vQ span{fill:#333;color:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .node rect,#mermaid-svg-8IE5mqxkbfDMs3vQ .node circle,#mermaid-svg-8IE5mqxkbfDMs3vQ .node ellipse,#mermaid-svg-8IE5mqxkbfDMs3vQ .node polygon,#mermaid-svg-8IE5mqxkbfDMs3vQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .rough-node .label text,#mermaid-svg-8IE5mqxkbfDMs3vQ .node .label text,#mermaid-svg-8IE5mqxkbfDMs3vQ .image-shape .label,#mermaid-svg-8IE5mqxkbfDMs3vQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-8IE5mqxkbfDMs3vQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .rough-node .label,#mermaid-svg-8IE5mqxkbfDMs3vQ .node .label,#mermaid-svg-8IE5mqxkbfDMs3vQ .image-shape .label,#mermaid-svg-8IE5mqxkbfDMs3vQ .icon-shape .label{text-align:center;}#mermaid-svg-8IE5mqxkbfDMs3vQ .node.clickable{cursor:pointer;}#mermaid-svg-8IE5mqxkbfDMs3vQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .arrowheadPath{fill:#333333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8IE5mqxkbfDMs3vQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8IE5mqxkbfDMs3vQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8IE5mqxkbfDMs3vQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8IE5mqxkbfDMs3vQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .cluster text{fill:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ .cluster span{color:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8IE5mqxkbfDMs3vQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8IE5mqxkbfDMs3vQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-8IE5mqxkbfDMs3vQ .icon-shape,#mermaid-svg-8IE5mqxkbfDMs3vQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8IE5mqxkbfDMs3vQ .icon-shape p,#mermaid-svg-8IE5mqxkbfDMs3vQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8IE5mqxkbfDMs3vQ .icon-shape .label rect,#mermaid-svg-8IE5mqxkbfDMs3vQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8IE5mqxkbfDMs3vQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8IE5mqxkbfDMs3vQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8IE5mqxkbfDMs3vQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 方法
实例方法
类方法
静态方法
操作实例属性
操作类属性
不操作属性
方法示例:
python
class Student:
school = "清华大学"
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法
def get_info(self):
"""获取学生信息"""
return f"{self.name}, {self.age}岁"
# 类方法
@classmethod
def get_school(cls):
"""获取学校名称"""
return cls.school
@classmethod
def change_school(cls, new_school):
"""修改学校名称"""
cls.school = new_school
# 静态方法
@staticmethod
def is_adult(age):
"""判断是否成年"""
return age >= 18
# 使用
student = Student("张三", 20)
# 实例方法
print(student.get_info()) # 输出:张三, 20岁
# 类方法
print(Student.get_school()) # 输出:清华大学
Student.change_school("北京大学")
print(student.get_school()) # 输出:北京大学
# 静态方法
print(Student.is_adult(20)) # 输出:True
(四)构造函数
构造函数是创建对象时自动调用的方法,用于初始化对象。
构造函数概念:
#mermaid-svg-SGRRJgKTjIrBixnI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SGRRJgKTjIrBixnI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SGRRJgKTjIrBixnI .error-icon{fill:#552222;}#mermaid-svg-SGRRJgKTjIrBixnI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SGRRJgKTjIrBixnI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SGRRJgKTjIrBixnI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SGRRJgKTjIrBixnI .marker.cross{stroke:#333333;}#mermaid-svg-SGRRJgKTjIrBixnI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SGRRJgKTjIrBixnI p{margin:0;}#mermaid-svg-SGRRJgKTjIrBixnI .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SGRRJgKTjIrBixnI .cluster-label text{fill:#333;}#mermaid-svg-SGRRJgKTjIrBixnI .cluster-label span{color:#333;}#mermaid-svg-SGRRJgKTjIrBixnI .cluster-label span p{background-color:transparent;}#mermaid-svg-SGRRJgKTjIrBixnI .label text,#mermaid-svg-SGRRJgKTjIrBixnI span{fill:#333;color:#333;}#mermaid-svg-SGRRJgKTjIrBixnI .node rect,#mermaid-svg-SGRRJgKTjIrBixnI .node circle,#mermaid-svg-SGRRJgKTjIrBixnI .node ellipse,#mermaid-svg-SGRRJgKTjIrBixnI .node polygon,#mermaid-svg-SGRRJgKTjIrBixnI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SGRRJgKTjIrBixnI .rough-node .label text,#mermaid-svg-SGRRJgKTjIrBixnI .node .label text,#mermaid-svg-SGRRJgKTjIrBixnI .image-shape .label,#mermaid-svg-SGRRJgKTjIrBixnI .icon-shape .label{text-anchor:middle;}#mermaid-svg-SGRRJgKTjIrBixnI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SGRRJgKTjIrBixnI .rough-node .label,#mermaid-svg-SGRRJgKTjIrBixnI .node .label,#mermaid-svg-SGRRJgKTjIrBixnI .image-shape .label,#mermaid-svg-SGRRJgKTjIrBixnI .icon-shape .label{text-align:center;}#mermaid-svg-SGRRJgKTjIrBixnI .node.clickable{cursor:pointer;}#mermaid-svg-SGRRJgKTjIrBixnI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SGRRJgKTjIrBixnI .arrowheadPath{fill:#333333;}#mermaid-svg-SGRRJgKTjIrBixnI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SGRRJgKTjIrBixnI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SGRRJgKTjIrBixnI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SGRRJgKTjIrBixnI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SGRRJgKTjIrBixnI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SGRRJgKTjIrBixnI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SGRRJgKTjIrBixnI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SGRRJgKTjIrBixnI .cluster text{fill:#333;}#mermaid-svg-SGRRJgKTjIrBixnI .cluster span{color:#333;}#mermaid-svg-SGRRJgKTjIrBixnI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SGRRJgKTjIrBixnI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SGRRJgKTjIrBixnI rect.text{fill:none;stroke-width:0;}#mermaid-svg-SGRRJgKTjIrBixnI .icon-shape,#mermaid-svg-SGRRJgKTjIrBixnI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SGRRJgKTjIrBixnI .icon-shape p,#mermaid-svg-SGRRJgKTjIrBixnI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SGRRJgKTjIrBixnI .icon-shape .label rect,#mermaid-svg-SGRRJgKTjIrBixnI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SGRRJgKTjIrBixnI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SGRRJgKTjIrBixnI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SGRRJgKTjIrBixnI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 构造函数
初始化对象
分配资源
设置初始值
创建时调用
分配内存
设置属性
构造函数示例:
python
class Student:
# 构造函数
def __init__(self, name, age, major="未定"):
self.name = name
self.age = age
self.major = major
self.courses = []
print(f"创建学生:{name}")
def get_info(self):
return f"{self.name}, {self.age}岁, {self.major}"
# 创建对象时自动调用构造函数
student1 = Student("张三", 20) # 创建学生:张三
student2 = Student("李四", 21, "计算机科学") # 创建学生:李四
print(student1.get_info()) # 输出:张三, 20岁, 未定
print(student2.get_info()) # 输出:李四, 21岁, 计算机科学
(五)析构函数
析构函数是对象销毁时自动调用的方法,用于清理资源。
析构函数概念:
#mermaid-svg-fTy510AsPrlDoTIN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fTy510AsPrlDoTIN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fTy510AsPrlDoTIN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fTy510AsPrlDoTIN .error-icon{fill:#552222;}#mermaid-svg-fTy510AsPrlDoTIN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fTy510AsPrlDoTIN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fTy510AsPrlDoTIN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fTy510AsPrlDoTIN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fTy510AsPrlDoTIN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fTy510AsPrlDoTIN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fTy510AsPrlDoTIN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fTy510AsPrlDoTIN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fTy510AsPrlDoTIN .marker.cross{stroke:#333333;}#mermaid-svg-fTy510AsPrlDoTIN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fTy510AsPrlDoTIN p{margin:0;}#mermaid-svg-fTy510AsPrlDoTIN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fTy510AsPrlDoTIN .cluster-label text{fill:#333;}#mermaid-svg-fTy510AsPrlDoTIN .cluster-label span{color:#333;}#mermaid-svg-fTy510AsPrlDoTIN .cluster-label span p{background-color:transparent;}#mermaid-svg-fTy510AsPrlDoTIN .label text,#mermaid-svg-fTy510AsPrlDoTIN span{fill:#333;color:#333;}#mermaid-svg-fTy510AsPrlDoTIN .node rect,#mermaid-svg-fTy510AsPrlDoTIN .node circle,#mermaid-svg-fTy510AsPrlDoTIN .node ellipse,#mermaid-svg-fTy510AsPrlDoTIN .node polygon,#mermaid-svg-fTy510AsPrlDoTIN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fTy510AsPrlDoTIN .rough-node .label text,#mermaid-svg-fTy510AsPrlDoTIN .node .label text,#mermaid-svg-fTy510AsPrlDoTIN .image-shape .label,#mermaid-svg-fTy510AsPrlDoTIN .icon-shape .label{text-anchor:middle;}#mermaid-svg-fTy510AsPrlDoTIN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fTy510AsPrlDoTIN .rough-node .label,#mermaid-svg-fTy510AsPrlDoTIN .node .label,#mermaid-svg-fTy510AsPrlDoTIN .image-shape .label,#mermaid-svg-fTy510AsPrlDoTIN .icon-shape .label{text-align:center;}#mermaid-svg-fTy510AsPrlDoTIN .node.clickable{cursor:pointer;}#mermaid-svg-fTy510AsPrlDoTIN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fTy510AsPrlDoTIN .arrowheadPath{fill:#333333;}#mermaid-svg-fTy510AsPrlDoTIN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fTy510AsPrlDoTIN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fTy510AsPrlDoTIN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fTy510AsPrlDoTIN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fTy510AsPrlDoTIN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fTy510AsPrlDoTIN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fTy510AsPrlDoTIN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fTy510AsPrlDoTIN .cluster text{fill:#333;}#mermaid-svg-fTy510AsPrlDoTIN .cluster span{color:#333;}#mermaid-svg-fTy510AsPrlDoTIN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fTy510AsPrlDoTIN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fTy510AsPrlDoTIN rect.text{fill:none;stroke-width:0;}#mermaid-svg-fTy510AsPrlDoTIN .icon-shape,#mermaid-svg-fTy510AsPrlDoTIN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fTy510AsPrlDoTIN .icon-shape p,#mermaid-svg-fTy510AsPrlDoTIN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fTy510AsPrlDoTIN .icon-shape .label rect,#mermaid-svg-fTy510AsPrlDoTIN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fTy510AsPrlDoTIN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fTy510AsPrlDoTIN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fTy510AsPrlDoTIN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 析构函数
清理资源
释放内存
关闭连接
销毁时调用
释放资源
关闭文件
析构函数示例:
python
class FileHandler:
def __init__(self, filename):
self.filename = filename
self.file = open(filename, 'w')
print(f"打开文件:{filename}")
def write(self, content):
self.file.write(content)
# 析构函数
def __del__(self):
self.file.close()
print(f"关闭文件:{self.filename}")
# 使用
handler = FileHandler("test.txt")
handler.write("Hello, World!")
# 对象销毁时自动调用析构函数
del handler # 关闭文件:test.txt
🌐 三、类的类型
(一)按抽象程度分类
按抽象程度分类:
| 类型 | 说明 | 示例 |
|---|---|---|
| 抽象类 | 不能实例化 | Animal |
| 具体类 | 可以实例化 | Dog, Cat |
| 接口类 | 定义接口 | Drawable |
(二)抽象类
抽象类是不能实例化的类,用于定义子类必须实现的方法。
抽象类示例:
python
from abc import ABC, abstractmethod
# 抽象类
class Shape(ABC):
@abstractmethod
def area(self):
"""计算面积(抽象方法)"""
pass
@abstractmethod
def display(self):
"""显示图形(抽象方法)"""
pass
# 具体方法
def get_info(self):
return f"面积是:{self.area()}"
# 具体类
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
def display(self):
print(f"圆形,半径:{self.radius}")
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def display(self):
print(f"矩形,宽:{self.width},高:{self.height}")
# 使用
# shape = Shape() # 错误:不能实例化抽象类
circle = Circle(5)
circle.display() # 圆形,半径:5
print(circle.get_info()) # 面积是:78.5
rectangle = Rectangle(4, 6)
rectangle.display() # 矩形,宽:4,高:6
print(rectangle.get_info()) # 面积是:24
(三)具体类
具体类是可以实例化的类。
具体类示例:
python
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def get_info(self):
return f"{self.name}, {self.age}岁"
# 可以实例化
student = Student("张三", 20)
print(student.get_info()) # 输出:张三, 20岁
(四)接口类
接口类定义了一组方法签名,子类必须实现这些方法。
接口类示例:
python
from abc import ABC, abstractmethod
# 接口类
class Drawable(ABC):
@abstractmethod
def draw(self):
pass
@abstractmethod
def erase(self):
pass
class Printable(ABC):
@abstractmethod
def print(self):
pass
# 实现接口
class Document(Drawable, Printable):
def __init__(self, content):
self.content = content
def draw(self):
print(f"绘制文档:{self.content}")
def erase(self):
print(f"擦除文档:{self.content}")
def print(self):
print(f"打印文档:{self.content}")
# 使用
doc = Document("报告")
doc.draw() # 绘制文档:报告
doc.print() # 打印文档:报告
💡 四、实例概述
(一)实例的定义
实例是类的具体化,是根据类创建的具体对象。
实例概念:
#mermaid-svg-h0O07gHzhIOTGIFL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-h0O07gHzhIOTGIFL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-h0O07gHzhIOTGIFL .error-icon{fill:#552222;}#mermaid-svg-h0O07gHzhIOTGIFL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-h0O07gHzhIOTGIFL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-h0O07gHzhIOTGIFL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-h0O07gHzhIOTGIFL .marker.cross{stroke:#333333;}#mermaid-svg-h0O07gHzhIOTGIFL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-h0O07gHzhIOTGIFL p{margin:0;}#mermaid-svg-h0O07gHzhIOTGIFL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-h0O07gHzhIOTGIFL .cluster-label text{fill:#333;}#mermaid-svg-h0O07gHzhIOTGIFL .cluster-label span{color:#333;}#mermaid-svg-h0O07gHzhIOTGIFL .cluster-label span p{background-color:transparent;}#mermaid-svg-h0O07gHzhIOTGIFL .label text,#mermaid-svg-h0O07gHzhIOTGIFL span{fill:#333;color:#333;}#mermaid-svg-h0O07gHzhIOTGIFL .node rect,#mermaid-svg-h0O07gHzhIOTGIFL .node circle,#mermaid-svg-h0O07gHzhIOTGIFL .node ellipse,#mermaid-svg-h0O07gHzhIOTGIFL .node polygon,#mermaid-svg-h0O07gHzhIOTGIFL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-h0O07gHzhIOTGIFL .rough-node .label text,#mermaid-svg-h0O07gHzhIOTGIFL .node .label text,#mermaid-svg-h0O07gHzhIOTGIFL .image-shape .label,#mermaid-svg-h0O07gHzhIOTGIFL .icon-shape .label{text-anchor:middle;}#mermaid-svg-h0O07gHzhIOTGIFL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-h0O07gHzhIOTGIFL .rough-node .label,#mermaid-svg-h0O07gHzhIOTGIFL .node .label,#mermaid-svg-h0O07gHzhIOTGIFL .image-shape .label,#mermaid-svg-h0O07gHzhIOTGIFL .icon-shape .label{text-align:center;}#mermaid-svg-h0O07gHzhIOTGIFL .node.clickable{cursor:pointer;}#mermaid-svg-h0O07gHzhIOTGIFL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-h0O07gHzhIOTGIFL .arrowheadPath{fill:#333333;}#mermaid-svg-h0O07gHzhIOTGIFL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-h0O07gHzhIOTGIFL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-h0O07gHzhIOTGIFL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-h0O07gHzhIOTGIFL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-h0O07gHzhIOTGIFL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-h0O07gHzhIOTGIFL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-h0O07gHzhIOTGIFL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-h0O07gHzhIOTGIFL .cluster text{fill:#333;}#mermaid-svg-h0O07gHzhIOTGIFL .cluster span{color:#333;}#mermaid-svg-h0O07gHzhIOTGIFL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-h0O07gHzhIOTGIFL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-h0O07gHzhIOTGIFL rect.text{fill:none;stroke-width:0;}#mermaid-svg-h0O07gHzhIOTGIFL .icon-shape,#mermaid-svg-h0O07gHzhIOTGIFL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-h0O07gHzhIOTGIFL .icon-shape p,#mermaid-svg-h0O07gHzhIOTGIFL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-h0O07gHzhIOTGIFL .icon-shape .label rect,#mermaid-svg-h0O07gHzhIOTGIFL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-h0O07gHzhIOTGIFL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-h0O07gHzhIOTGIFL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-h0O07gHzhIOTGIFL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 实例化
类
实例
具体对象
独立状态
唯一标识
(二)实例的特点
实例特点:
| 特点 | 说明 |
|---|---|
| 具体性 | 类的具体化 |
| 独立性 | 独立的状态 |
| 唯一性 | 唯一的标识 |
| 动态性 | 可以改变状态 |
(三)实例化过程
实例化过程:
#mermaid-svg-04X9HW8Gx3ccQ9ct{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-04X9HW8Gx3ccQ9ct .error-icon{fill:#552222;}#mermaid-svg-04X9HW8Gx3ccQ9ct .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-04X9HW8Gx3ccQ9ct .marker{fill:#333333;stroke:#333333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .marker.cross{stroke:#333333;}#mermaid-svg-04X9HW8Gx3ccQ9ct svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-04X9HW8Gx3ccQ9ct p{margin:0;}#mermaid-svg-04X9HW8Gx3ccQ9ct .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .cluster-label text{fill:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .cluster-label span{color:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .cluster-label span p{background-color:transparent;}#mermaid-svg-04X9HW8Gx3ccQ9ct .label text,#mermaid-svg-04X9HW8Gx3ccQ9ct span{fill:#333;color:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .node rect,#mermaid-svg-04X9HW8Gx3ccQ9ct .node circle,#mermaid-svg-04X9HW8Gx3ccQ9ct .node ellipse,#mermaid-svg-04X9HW8Gx3ccQ9ct .node polygon,#mermaid-svg-04X9HW8Gx3ccQ9ct .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .rough-node .label text,#mermaid-svg-04X9HW8Gx3ccQ9ct .node .label text,#mermaid-svg-04X9HW8Gx3ccQ9ct .image-shape .label,#mermaid-svg-04X9HW8Gx3ccQ9ct .icon-shape .label{text-anchor:middle;}#mermaid-svg-04X9HW8Gx3ccQ9ct .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .rough-node .label,#mermaid-svg-04X9HW8Gx3ccQ9ct .node .label,#mermaid-svg-04X9HW8Gx3ccQ9ct .image-shape .label,#mermaid-svg-04X9HW8Gx3ccQ9ct .icon-shape .label{text-align:center;}#mermaid-svg-04X9HW8Gx3ccQ9ct .node.clickable{cursor:pointer;}#mermaid-svg-04X9HW8Gx3ccQ9ct .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .arrowheadPath{fill:#333333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-04X9HW8Gx3ccQ9ct .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-04X9HW8Gx3ccQ9ct .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-04X9HW8Gx3ccQ9ct .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-04X9HW8Gx3ccQ9ct .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .cluster text{fill:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct .cluster span{color:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-04X9HW8Gx3ccQ9ct .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-04X9HW8Gx3ccQ9ct rect.text{fill:none;stroke-width:0;}#mermaid-svg-04X9HW8Gx3ccQ9ct .icon-shape,#mermaid-svg-04X9HW8Gx3ccQ9ct .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-04X9HW8Gx3ccQ9ct .icon-shape p,#mermaid-svg-04X9HW8Gx3ccQ9ct .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-04X9HW8Gx3ccQ9ct .icon-shape .label rect,#mermaid-svg-04X9HW8Gx3ccQ9ct .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-04X9HW8Gx3ccQ9ct .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-04X9HW8Gx3ccQ9ct .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-04X9HW8Gx3ccQ9ct :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 实例化
分配内存
调用构造函数
初始化属性
返回实例
实例化示例:
python
class Student:
def __init__(self, name, age):
print("1. 分配内存")
print("2. 调用构造函数")
self.name = name
self.age = age
print("3. 初始化属性")
print("4. 返回实例")
# 实例化过程
print("开始实例化...")
student = Student("张三", 20)
print("实例化完成")
# 输出:
# 开始实例化...
# 1. 分配内存
# 2. 调用构造函数
# 3. 初始化属性
# 4. 返回实例
# 实例化完成
📊 五、类与实例的关系
(一)关系概述
关系概述:
#mermaid-svg-aY7eFWpfOcYI8bSj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aY7eFWpfOcYI8bSj .error-icon{fill:#552222;}#mermaid-svg-aY7eFWpfOcYI8bSj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aY7eFWpfOcYI8bSj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aY7eFWpfOcYI8bSj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aY7eFWpfOcYI8bSj .marker.cross{stroke:#333333;}#mermaid-svg-aY7eFWpfOcYI8bSj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aY7eFWpfOcYI8bSj p{margin:0;}#mermaid-svg-aY7eFWpfOcYI8bSj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj .cluster-label text{fill:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj .cluster-label span{color:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj .cluster-label span p{background-color:transparent;}#mermaid-svg-aY7eFWpfOcYI8bSj .label text,#mermaid-svg-aY7eFWpfOcYI8bSj span{fill:#333;color:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj .node rect,#mermaid-svg-aY7eFWpfOcYI8bSj .node circle,#mermaid-svg-aY7eFWpfOcYI8bSj .node ellipse,#mermaid-svg-aY7eFWpfOcYI8bSj .node polygon,#mermaid-svg-aY7eFWpfOcYI8bSj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aY7eFWpfOcYI8bSj .rough-node .label text,#mermaid-svg-aY7eFWpfOcYI8bSj .node .label text,#mermaid-svg-aY7eFWpfOcYI8bSj .image-shape .label,#mermaid-svg-aY7eFWpfOcYI8bSj .icon-shape .label{text-anchor:middle;}#mermaid-svg-aY7eFWpfOcYI8bSj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aY7eFWpfOcYI8bSj .rough-node .label,#mermaid-svg-aY7eFWpfOcYI8bSj .node .label,#mermaid-svg-aY7eFWpfOcYI8bSj .image-shape .label,#mermaid-svg-aY7eFWpfOcYI8bSj .icon-shape .label{text-align:center;}#mermaid-svg-aY7eFWpfOcYI8bSj .node.clickable{cursor:pointer;}#mermaid-svg-aY7eFWpfOcYI8bSj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aY7eFWpfOcYI8bSj .arrowheadPath{fill:#333333;}#mermaid-svg-aY7eFWpfOcYI8bSj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aY7eFWpfOcYI8bSj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aY7eFWpfOcYI8bSj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aY7eFWpfOcYI8bSj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aY7eFWpfOcYI8bSj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aY7eFWpfOcYI8bSj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aY7eFWpfOcYI8bSj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aY7eFWpfOcYI8bSj .cluster text{fill:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj .cluster span{color:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aY7eFWpfOcYI8bSj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aY7eFWpfOcYI8bSj rect.text{fill:none;stroke-width:0;}#mermaid-svg-aY7eFWpfOcYI8bSj .icon-shape,#mermaid-svg-aY7eFWpfOcYI8bSj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aY7eFWpfOcYI8bSj .icon-shape p,#mermaid-svg-aY7eFWpfOcYI8bSj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aY7eFWpfOcYI8bSj .icon-shape .label rect,#mermaid-svg-aY7eFWpfOcYI8bSj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aY7eFWpfOcYI8bSj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aY7eFWpfOcYI8bSj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aY7eFWpfOcYI8bSj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 类与实例
模板与产品
抽象与具体
一对多关系
类是模板
实例是产品
类是抽象
实例是具体
一个类多个实例
(二)关系详解
关系详解:
| 关系 | 说明 |
|---|---|
| 模板关系 | 类是模板,实例是产品 |
| 抽象关系 | 类是抽象,实例是具体 |
| 一对多 | 一个类可以创建多个实例 |
| 独立关系 | 实例之间相互独立 |
(三)关系示例
关系示例:
python
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def get_info(self):
return f"{self.name}, {self.age}岁"
# 一个类,多个实例
student1 = Student("张三", 20)
student2 = Student("李四", 21)
student3 = Student("王五", 22)
# 实例之间相互独立
print(student1.get_info()) # 输出:张三, 20岁
print(student2.get_info()) # 输出:李四, 21岁
print(student3.get_info()) # 输出:王五, 22岁
# 修改一个实例不影响其他实例
student1.age = 25
print(student1.get_info()) # 输出:张三, 25岁
print(student2.get_info()) # 输出:李四, 21岁(未改变)
📋 六、类的设计原则
(一)单一职责原则
单一职责原则:一个类应该只有一个职责。
示例:
python
# 违反单一职责原则
class User:
def __init__(self, name, email):
self.name = name
self.email = email
def save_to_db(self):
# 保存数据库
pass
def send_email(self):
# 发送邮件
pass
# 遵循单一职责原则
class User:
def __init__(self, name, email):
self.name = name
self.email = email
class UserRepository:
def save(self, user):
# 保存数据库
pass
class EmailService:
def send(self, user):
# 发送邮件
pass
(二)开闭原则
开闭原则:对扩展开放,对修改关闭。
示例:
python
# 违反开闭原则
class Discount:
def calculate(self, price, type):
if type == "VIP":
return price * 0.8
elif type == "NORMAL":
return price * 0.9
return price
# 遵循开闭原则
class Discount:
def calculate(self, price):
return price
class VIPDiscount(Discount):
def calculate(self, price):
return price * 0.8
class NormalDiscount(Discount):
def calculate(self, price):
return price * 0.9
(三)里氏替换原则
里氏替换原则:子类应该能够替换父类。
示例:
python
# 遵循里氏替换原则
class Shape:
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side ** 2
# 子类可以替换父类
def print_area(shape):
print(f"面积:{shape.area()}")
print_area(Rectangle(4, 6)) # 面积:24
print_area(Square(5)) # 面积:25
(四)接口隔离原则
接口隔离原则:使用多个专门的接口。
示例:
python
# 违反接口隔离原则
class Worker:
def work(self):
pass
def eat(self):
pass
# 遵循接口隔离原则
class Workable:
def work(self):
pass
class Eatable:
def eat(self):
pass
class HumanWorker(Workable, Eatable):
def work(self):
pass
def eat(self):
pass
class RobotWorker(Workable):
def work(self):
pass
(五)依赖倒置原则
依赖倒置原则:依赖抽象而非具体。
示例:
python
# 违反依赖倒置原则
class BusinessLogic:
def __init__(self):
self.database = MySQLDatabase()
def process(self):
self.database.query()
# 遵循依赖倒置原则
class Database:
def query(self):
pass
class MySQLDatabase(Database):
def query(self):
pass
class BusinessLogic:
def __init__(self, database: Database):
self.database = database
def process(self):
self.database.query()
📝 七、类和实例的应用
(一)应用背景
项目:学生成绩管理系统
类设计:
- Student类:学生类
- Course类:课程类
- Grade类:成绩类
(二)类设计
Student类:
python
class Student:
# 类属性
school = "清华大学"
count = 0
def __init__(self, student_id, name, age):
# 实例属性
self.student_id = student_id
self.name = name
self.age = age
self.courses = []
self.grades = {}
Student.count += 1
# 实例方法
def enroll(self, course):
"""选课"""
if course not in self.courses:
self.courses.append(course)
print(f"{self.name}选了{course.name}")
def set_grade(self, course, grade):
"""设置成绩"""
self.grades[course.name] = grade
def get_average(self):
"""获取平均分"""
if not self.grades:
return 0
return sum(self.grades.values()) / len(self.grades)
def get_info(self):
"""获取信息"""
return f"{self.name}, {self.age}岁, 平均分:{self.get_average():.2f}"
# 类方法
@classmethod
def get_count(cls):
"""获取学生总数"""
return cls.count
# 静态方法
@staticmethod
def is_valid_id(student_id):
"""验证学号"""
return len(student_id) == 8
Course类:
python
class Course:
def __init__(self, course_id, name, credit):
self.course_id = course_id
self.name = name
self.credit = credit
self.students = []
def add_student(self, student):
"""添加学生"""
if student not in self.students:
self.students.append(student)
def get_student_count(self):
"""获取学生数"""
return len(self.students)
def get_info(self):
"""获取信息"""
return f"{self.name}, 学分:{self.credit}, 学生数:{self.get_student_count()}"
Grade类:
python
class Grade:
def __init__(self, student, course, score):
self.student = student
self.course = course
self.score = score
def is_passed(self):
"""是否及格"""
return self.score >= 60
def get_level(self):
"""获取等级"""
if self.score >= 90:
return "优秀"
elif self.score >= 80:
return "良好"
elif self.score >= 70:
return "中等"
elif self.score >= 60:
return "及格"
else:
return "不及格"
def get_info(self):
"""获取信息"""
return f"{self.student.name}的{self.course.name}成绩:{self.score}分({self.get_level()})"
(三)实例使用
实例使用示例:
python
# 创建课程实例
course1 = Course("C001", "数学", 4)
course2 = Course("C002", "英语", 3)
course3 = Course("C003", "计算机", 4)
# 创建学生实例
student1 = Student("20240001", "张三", 20)
student2 = Student("20240002", "李四", 21)
# 学生选课
student1.enroll(course1)
student1.enroll(course2)
student1.enroll(course3)
student2.enroll(course1)
student2.enroll(course3)
# 创建成绩实例
grade1 = Grade(student1, course1, 85)
grade2 = Grade(student1, course2, 92)
grade3 = Grade(student1, course3, 78)
grade4 = Grade(student2, course1, 90)
grade5 = Grade(student2, course3, 88)
# 设置成绩
student1.set_grade(course1, 85)
student1.set_grade(course2, 92)
student1.set_grade(course3, 78)
student2.set_grade(course1, 90)
student2.set_grade(course3, 88)
# 查看信息
print(student1.get_info()) # 张三, 20岁, 平均分:85.00
print(student2.get_info()) # 李四, 21岁, 平均分:89.00
print(course1.get_info()) # 数学, 学分:4, 学生数:2
print(course2.get_info()) # 英语, 学分:3, 学生数:1
print(course3.get_info()) # 计算机, 学分:4, 学生数:2
print(grade1.get_info()) # 张三的数学成绩:85分(良好)
print(grade2.get_info()) # 张三的英语成绩:92分(优秀)
print(f"学生总数:{Student.get_count()}") # 学生总数:2
print(f"学号验证:{Student.is_valid_id('20240001')}") # 学号验证:True
📝 总结
类和实例是面向对象技术的核心概念。
🎯 类的定义:类是对象的模板,定义了对象的属性和方法,是一组具有相同属性和行为的对象的抽象。
📦 类的组成:
- 属性:类的数据成员,包括类属性和实例属性
- 方法:类的操作行为,包括实例方法、类方法和静态方法
- 构造函数:创建对象时自动调用
- 析构函数:销毁对象时自动调用
🌐 类的类型:
- 抽象类:不能实例化,定义抽象方法
- 具体类:可以实例化
- 接口类:定义接口规范
💡 实例定义:实例是类的具体化,是根据类创建的具体对象。
📊 类与实例的关系:
- 模板关系:类是模板,实例是产品
- 抽象关系:类是抽象,实例是具体
- 一对多:一个类可以创建多个实例
- 独立关系:实例之间相互独立
📋 类的设计原则:
- 单一职责原则:一个类只有一个职责
- 开闭原则:对扩展开放,对修改关闭
- 里氏替换原则:子类可以替换父类
- 接口隔离原则:使用多个专门接口
- 依赖倒置原则:依赖抽象而非具体
核心启示:类和实例是面向对象技术的核心概念,类是对象的模板,实例是类的具体化。理解类和实例的概念和关系,是掌握面向对象技术的关键。在实际工作中,我们需要注意:第一,深入理解类的组成要素(属性、方法、构造函数、析构函数);第二,掌握类的不同类型(抽象类、具体类、接口类);第三,理解类与实例的关系(模板与产品、抽象与具体、一对多);第四,遵循类的设计原则(SOLID原则);第五,合理设计类,确保类的单一职责和高内聚低耦合。类和实例不仅是代码的基本单元,更是我们理解和建模现实世界的工具。通过合理的类设计,我们可以构建出结构清晰、易于维护的软件系统。记住:好的类设计是面向对象成功的基础。