3. Python 面向对象编程

2023-11-20

Python 面向对象编程

在北宋时期,毕昇发明了活字印刷术。他先将文字做成一个个汉字模具,然后按照稿件把单字挑选出来,排列在字盘内,涂墨印刷成书,印完后再将字模拆出,留待下次排印时再次使用。活字印刷术相对于文字书写更加简洁高效,它对印刷业的兴起发挥了重大作用,甚至推动了欧洲文艺复兴的发展。

Python 是一种基于面向对象设计的编程语言,它使用“类”与“对象”进行编程。这里“类”就好比汉字模具,“对象”就好比印刷完的书籍。你不需要一次又一次书写复杂重复的程序,只需要提前编写好需要的类,然后通过类产生具有特定功能的对象即可,这大大提高了 Python 编程的简洁性。

下面我们就通过面向对象的角度重新审视 Python 宇宙,相信你可以感受到面向对象带来的代码简化与效率提升。

1.3.1 面向对象编程理论

在之前的代码中,我们往往采用典型的面向过程编程方式,定义很多函数与变量:

## 定义函数:
函数1
函数2
函数3
函数4

## 定义变量:
变量1
变量2
变量3
变量4

## 通过变量与函数完成操作
变量3 = 函数1(变量1, 变量2)
变量5 = 函数2(变量3, 变量4)

然而当我们要实现的功能越来越复杂,需要添加的函数与变量也就越来越多。每个函数都有不同的功能,有特定的参数与返回结果,每个变量也有不同的表示意义,程序会变得越来越难以维护。而面向对象通过类与对象的方式解决问题:

## 根据功能定义类1
类1:
    类函数1
变量:
    变量1
    变量2

## 根据功能定义类2
类2:
    类函数2
    类函数3
变量:
    变量3
    变量4
    变量5
    
## 通过对象完成操作
对象1 = 类1()
对象2 = 类2()
对象2.变量5 = 对象2.函数2(对象1.函数1())


面向对象编程的出现,使得变量和函数可以根据功能进行整理分类,通过面向对象的模块化编程,大大减轻了复杂程序的设计与维护负担。

1.3.1.1 对象

在 Python 中一切都是对象,就像在现实世界中一切都是对象。

  • 在现实中:对象可以是有型的,例如一粒米、一名学生、一辆汽车,甚至一个星球。它也可以是无形的,例如一次演出,一场球赛,一次出差。对象可以简单也可以复杂,复杂的对象可以由许多简单的对象构成,整个世界也可以被认为是一个非常复杂的对象。

  • 在 Python 中:对象可以是有型的,例如一个常量,一个变量,一个序列或字典。它也可以是无形的,例如一个函数。对象可以简单也可以复杂,复杂的对象可以由许多的简单对象组成,整个 Python 程序也可以被当作一个对象。

无论在现实中或 Python 中,对象都具有以下三个特性:

  • 每个对象都有一个独特的名字以区别于其他对象。
  • 有属性来描述它的某些特征。
  • 有一组操作,每个操作决定对象的一种行为。

1.3.1.2 类

类是用来定义对象的 “模板”。

  • 在现实中:类是一组具有相同属性和行为的对象的抽象。例如张三、李四虽然每个人有不同的性格与职业,但他们的基本特征是相似的,都有鼻子有眼能吃饭,因此我们统称他们为“人”类,而每一个人就是一个对象。
  • 在 Python 中:类是一组具有相同数据和操作的对象的模板集合。例如“学生”类可以由学号、姓名、性别、成绩等表示其属性的数据项和对这些数据的录入、修改和显示等操作组成,而每一个特定的学生例如 XiaoHu 就是一个对象。

1.3.1.3 面向对象编程的特点

面向对象编程有以下几个基本特征:

  • 抽象:是将有关事物的特征归纳、集中的过程。通过总结不同“对象”的主要特性设计一个“类”,只强调感兴趣的信息,忽略了与主题无关的信息。
  • 封装:是把数据和操作集中在对象内部,并尽可能隐藏对象的内部细节。对象像一个黑匣子,你只要知道它提供的功能,不需要了解其内部的实现方式。
  • 继承:是指一个类可以继承另一个类的特征与功能,并添加自己的特征。例如“吉士堡”继承了“汉堡”类,它有面包、菜与肉,但也有独特的一片芝士。
  • 多态:指不同的对象进行相同操作时产生多种不同的行为方式。例如“打开”电风扇它会旋转,“打开”电脑屏幕会亮,“打开”抽屉柜子门会开,同样是打开操作,不同对象收到指令后的行为方式是不同的。

1.3.2 Python 面向对象编程

到目前为止,我们接触的变量、运算符、函数等概念来源于 “面向过程” 的编程方式。在上一节中,你可能会对 names.append('Cryin') 这种写法感到疑惑,为什么序列变量 names 可以通过符号 . 调用 append 函数?这种编程方式便是面向对象编程,在这里 names 是一个对象,对象拥有很多类似 append 的函数,每个对象都属于某一个类。

下面我们将介绍 Python 中的面向对象编程方法,并以上一节中的学生成绩管理系统为例方便大家理解。

1.3.2.1 Python 类与对象

Python 使用 class 关键字定义类,类似函数,下面的缩进部分构成了类的主体:

## 创建一个 student 类
class student():
    pass

使用类的名字和一对括号可以创建类的对象:

## 使用 类的名字 student 与 括号() 可以创建类的对象 xiaohu
xiaohu = student()
xiaoming = student()

print(type(xiaohu))
print(type(xiaoming))
<class '__main__.student'>
<class '__main__.student'>

1.3.2.2 类与对象中的变量

我们提到类与对象都有包含一组属性与方法,在 Python 中类的变量用于表示类的属性。student 表示学生类,在我们的系统中我们只关注学生的姓名、数学成绩和语文成绩而不考虑其他,分别用类变量 name, Math_score, Chinese_score 表示。这体现了面向对象编程的”抽象性“。

## 创建一个 student 类
class student():
    ## 类的内部定义三个内部变量,并定义他们的初始值
    name = 'Undefined'
    Math_score = None
    Chinese_score = None

在 Python 中对象拥有与类相同的数据和操作,因此通过类创建的对象也拥有相同的变量。我们使用 . 符号来引用对象或类的变量与函数:

## 使用 类的名字 student 与 括号() 可以创建类的对象 xiaohu
xiaohu = student()
## 使用 . 符号引用对象xiaohu的变量name、Math_score、Chinese_score
print(xiaohu.name)
print(xiaohu.Math_score)
print(xiaohu.Chinese_score)
Undefined
None
None

这里我们通过类创建对象还仅仅是一个初始值,这里我们可以通过赋值符号改变对象内数据的值:

## 通过赋值符号改变对象内变量的值
xiaohu.name = 'XiaoHu'
xiaohu.Math_score = 65
xiaohu.Chinese_score = 55

print(xiaohu.name)
print(xiaohu.Math_score)
print(xiaohu.Chinese_score)
XiaoHu
65
55

在这里我们要注意区分两个概念,类变量与对象变量,在上述代码中 student.name 是类变量,xiaohu.name 是对象变量。

  • 类变量属于类,更改类变量会影响所有后续由该类创建对象的属性。
  • 对象变量属于对象,更改对象变量只影响该对象的属性。
## 更改对象变量只影响该对象的属性。
xiaoming = student()
## 修改 xiaoming.name,xiaohu 的属性不受影响
xiaoming.name = 'XiaoMing'
print(xiaoming.name)
print(xiaohu.name)
XiaoMing
XiaoHu
## 更改类变量会影响所有后续由该类创建对象的属性。
xiaoming = student()
print(xiaoming.name)

## 修改 student.name 再次创建新对象 xiaoming
student.name = 'Change Name'
xiaoming = student()

## xiaoming.name 不再是 undefined 而是 change name
print(xiaoming.name)
Undefined
Change Name

1.3.2.3 类与对象中的函数

在 Python 中类函数用于表示类的操作,它又被称作为“方法”。它们与之前我们学到的函数类似,但是类函数必须有一个额外的 self 参数:

class student():
    ## 定义类函数时要有一个特殊的 self 参数
    def print_name(self,):
        print(self.name)
        
    name = 'Undefined'
    Math_score = None
    Chinese_score = None
xiaohu = student()
xiaohu.name = 'Xiaohu'
xiaohu.print_name()
Xiaohu

self 函数用于在类的内部指向对象本身,它是用于连接 类 与 对象 的工具,也是 Python 面向对象编程“多态”特性的一种体现。

例如在上述代码,我们使用 student 类产生对象 xiaohu,那么 self 就代指 xiaohu;如果我们产生对象 xiaoming,那么 self 就会自动代指 xiaoming。因此 self 参数可以根据不同对象产生不同操作,这体现了面向对象编程的“多态性”。

我们还可以给 student 创建一个用于更改成绩的方法,这样我们后续就不需要通过赋值符号更改对象内的数据:

class student():
    ## 定义一个修改对象数据值的函数
    def change_score(self, course_name, score):
        if course_name == 'Math':
            self.Math_score = score
        elif course_name == 'Chinese':
            self.Chinese_score = score
        ## 如果输入的 course_name 不是 Math 或者 Chinese,则输出错误信息
        else:
            print(course_name, " course is still not in current system")
    
    def print_name(self,):
        print(self.name)
        
    name = 'Undefined'
    Math_score = None
    Chinese_score = None
xiaohu = student()
xiaohu.name = 'Xiaohu'
xiaohu.change_score('Math', 65)
xiaohu.change_score('Chinese',55)
xiaohu.change_score('Physics',48)
Physics  course is still not in current system

随着系统的迭代,系统的复杂度将会直线上升。假设当我们有了十多种课程后,采用 change_score 函数要比直接为一个个课程的成绩赋值更加优雅,用户不再需要了解 student 类中有定义哪些变量等复杂细节,只需要了解 change_score 函数的用法便可以更改学生成绩,这体现了面向对象编程的“封装性”。

1.3.2.4 __init__ 方法

在之前的代码中,我们采用赋值符号来为对象产生初始值:

xiaohu.name = 'XiaoHu'
xiaohu.Math_score = 65
xiaohu.Chinese_score = 55

然而这种方式或许有些麻烦,其实 Python 类中有一种 __init__ 方法专门用于初始化对象。这个方法在通过类创建对象时被自动调用,并按照你的想法初始化该对象。下面我们通过 __init__ 方法重新定义 student 类:

class student():
    ## 定义 __init__ 方法,通过该方法的参数输入初始值,在该方法内部为变量赋值
    def __init__(self, name, Math_score, Chinese_score):
        self.name = name
        self.Math_score = Math_score
        self.Chinese_score = Chinese_score
    
    def change_score(self, course_name, score):
        if course_name == 'Math':
            self.Math_score = score
        elif course_name == 'Chinese':
            self.Chinese_score = score
        ## 如果输入的 course_name 不是 Math 或者 Chinese,则输出错误信息
        else:
            print(course_name, " course is still not in current system")
    
    def print_name(self,):
        print(self.name)
    
    name = 'Undefined'
    Math_score = None
    Chinese_score = None

在定义了 __init__ 方法后,我们通过在类后面的小括号内传递参数的方式初始化对象:

## 
xiaohu = student('XiaoHu',65,55)
xiaohu.print_name()
XiaoHu

1.3.3 万物皆对象

对象是 Python 中最核心的概念,犹如道教中 “一生二,二生三,三生万物”,Python 中万物皆源于对象。下面我们在面向对象编程的角度回顾之前学习的变量、函数以及数据结构。

1.3.3.1 重识变量

在 Python 中所有变量都是对象,下面我们创建一个 int 变量,它有 bit_lenth, conjugate, to_byte, from_byte 等方法。我们测试一下 to_byte 方法:

variable = 1
type(variable)
int

to_byte 将 int 对象转化成 byte 对象 b’\x00x\01’ 因为整数 1 的二进制编码是 0001。

variable_byte = variable.to_bytes(2, byteorder = 'big')
print(variable_byte)
print(type(variable_byte))
b'\x00\x01'
<class 'bytes'>

1.3.3.2 重识常量

Python 中的常量也是对象,其中最常用到对象方法的是字符串常量。

字符串常用方法如下:

  • format(): 用于从其他信息中构造字符串。
  • replace(): 用于替代字符串中的某个字符或子串。
  • split(): 用于通过某种字符分隔字符串。
  • upper(): 把字符串转换成大写。
  • lower(): 把字符串转化成小写。
## format 方法使用 {数字 i} 对应 (第i个变量) 来控制用于构造字符串的参数 
print("Learn {0} in a {1} way!!".format('Python','smart'))
print("Learn {0} in a {1} way!!".format('PHP','hard'))
Learn Python in a smart way!!
Learn PHP in a hard way!!
## replace 方法使用一个或多个参数分隔字符串,并返回子串构成的序列
print("Learn Python in a smart way!!".replace('smart','hard'))
Learn Python in a hard way!!
## split 方法使用一个或多个参数分隔字符串,并返回子串构成的序列
print("Learn Python in a smart way!!".split(' '))
['Learn', 'Python', 'in', 'a', 'smart', 'way!!']
## upper 和 lower 方法转化大小写
print("Learn Python in a smart way!!".upper())
print("Learn Python in a smart way!!".lower())
LEARN PYTHON IN A SMART WAY!!
learn python in a smart way!!

1.3.3.2 重识函数

更神奇的是,在 Python 中函数也是对象,因此函数也有自己的数据与方法。

def check_sum(num1, num2, target):
    ## 在 def xxx(): 下面缩进的是函数的内容
    a = num1
    b = num2
    return a + b == target

通过 .__name__ 成员变量可以获得函数的名字:

check_sum.__name__
'check_sum'

1.3.3.3 重识数据结构

现在你可以想象到,数据结构也理所应当是对象。是的,数据结构为我们提供了许多非常的方法!上一节中的 append 就是其中一个。

l = [1,2,3,4]
l.append(5)
print(l)
[1, 2, 3, 4, 5]

除此之外,我们可以通过 pop 方法替代 del 关键字删除序列内某个元素:

l.pop(1)
print(l)
[1, 3, 4, 5]

通过 insert 方法在特定位置增加元素:

## 第一个参数是位置,第二个参数是插入的元素
l.insert(0,1)
print(l)
[1, 1, 3, 4, 5]

同样的,在元组、字典、集合等数据结构中也提供了很多方法,在此将常用的方法总结如下:

  • 列表

    • append(x) 把元素 x 放在入列表尾部
    • count(x) 统计元素 x 在列表中出现次数
    • extent(seq) 把新列表 seq 合并到列表尾部
    • index(x) 返回元素 x 在列表第一次出现的位置
    • insert(index, x) 把元素 x 插入到 index 位置
    • pop(index) 删除并返回 index 所在位置的元素
    • remove(x) 删除出现的第一个 x 元素
    • reverse() 颠倒列表顺序
    • sort() 对列表进行排序
  • 字典

    • clear() 清楚字典内所有元素
    • copy() 返回字典的一个复制
    • has_key(key) 检查 key 是否在字典中
    • items() 返回一个含由 (key, value) 格式元组构成的列表
    • keys() 返回由键构成列表
    • values() 返回由值构成的列表
    • setdefault(key, default) 为键 key 添加默认值 default
    • pop(key) 删除 key 并返回对应的值
  • 集合

    • add(x) 向集合中添加元素 x
    • clear() 清空集合
    • copy() 返回集合的一个复制
    • difference(set) 返回集合与另一个集合的差集
    • discard(x) 删除元素 x
    • isdisjoint(set) 判断两个集合是否有交集
    • issubset(set) 判断新集合 set 是否是集合的子集
    • issuperset() 判断新集合 set 是否是集合的超集

1.3.3.4 重识程序

在某种意义上,我们也可以认为 Python 程序是一个对象,它也有自己的数据和方法。其中 __name__ 就是它的一个变量,我们并没有定义过这个变量,但由于它是程序的对象变量,因此可以直接调用。

__name__
'__main__'

1.3.4 练习

1.3.4.1 重构成绩管理系统

此练习是开放题,使用 面向对象 的编程方法重构之前的成绩管理系统,并完成之前的任务。

Task 1. 在上一次期末考试中,XiaoHu 考了数学 65 分,语文 55 分;XiaoMing 考了数学 80 分,语文92 分;XiaoWei 考了数学 95 分,语文 98 分,以此建立学生成绩管理系统。

Task 2. 在本次期末考试中,XiaoHu 考了数学 95 分,语文 85 分;XiaoMing 考了数学 75 分,语文 71 分;XiaoWei 考了数学 92 分,语文 93 分,以此对之前的成绩进行更新。

Task 3. 由于 XiaoMing 的成绩出现了大幅度下滑,家长决定要 XiaoMing 转学到另一所高中,以此在系统中删除 XiaoMing 的信息。

Task 4. 学校新转来的学生 Cryin 本次考试成绩为 数学 87 分,语文 88 分,在系统中录入 Cryin 的成绩。

class student():
    def __init__(self, name, Math_score, Chinese_score):
        self.name = name
        self.Math_score = Math_score
        self.Chinese_score = Chinese_score
    
    ## repr 函数用于定义对象被输出时的输出结果
    def __repr__(self):
        return str((self.name, self.Math_score, self.Chinese_score))
    
    def change_score(self, course_name, score):
        if course_name == 'Math':
            self.Math_score = score
        elif course_name == 'Chinese':
            self.Chinese_score = score
        else:
            print(course_name, " course is still not in current system")
    
    def print_name(self,):
        print(self.name)
    
    name = 'Undefined'
    Math_score = None
    Chinese_score = None

之前我们实现了学生类,现在我们通过把学生对象保存在字典中实现一个成绩系统。

## Task1
ab = {}
ab.setdefault('XiaoHu', student('XiaoHu', 65, 55))
ab.setdefault('XiaoMing', student('XiaoMing', 80, 92))
ab.setdefault('XiaoWei', student('XiaoHu', 95, 98))
print(ab)

## Task2
ab['XiaoHu'].change_score('Math', 95)
ab['XiaoMing'].change_score('Math', 75)
ab['XiaoWei'].change_score('Math', 92)

ab['XiaoHu'].change_score('Chinese', 85)
ab['XiaoMing'].change_score('Chinese', 71)
ab['XiaoWei'].change_score('Chinese', 93)
print(ab)

## Task3
ab.pop('XiaoMing')
print(ab)

## Task4
ab.setdefault('Cryin', student('Cryin', 87, 88))
print(ab)
{'XiaoHu': ('XiaoHu', 65, 55), 'XiaoMing': ('XiaoMing', 80, 92), 'XiaoWei': ('XiaoHu', 95, 98)}
{'XiaoHu': ('XiaoHu', 95, 85), 'XiaoMing': ('XiaoMing', 75, 71), 'XiaoWei': ('XiaoHu', 92, 93)}
{'XiaoHu': ('XiaoHu', 95, 85), 'XiaoWei': ('XiaoHu', 92, 93)}
{'XiaoHu': ('XiaoHu', 95, 85), 'XiaoWei': ('XiaoHu', 92, 93), 'Cryin': ('Cryin', 87, 88)}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3. Python 面向对象编程 的相关文章

随机推荐

  • 《OpenGL编程指南》示例笔记(2)--独立地移动光源

    TITLE OpenGL编程指南 示例笔记 2 独立地移动光源 AUTHOR norains DATE Monday 21 June 2010 Environment Windows XP 示例概述 例名 独立地移动光源 序号 5 6 页码
  • TVS管电路原理图符号及选型举例

    TVS管的电路原理图符号与稳压二极管符号类似 结构也都差不多 了解TVS管的电路原理图符号是掌握TVS管符合选型的基础 一般常见的TVS管电路原理图符号有 VBR IPP IR VRWM VC PM CP VBR代表的是 击穿电压 IPP代
  • 最详细的Vue实现日历组件Calendar(日期点击多选,滑动多选)

    1 成果演示 1 1 日期的切换 1 2 点击多选 1 3 滑动多选 2 实现基本的日期渲染 2 1 思路 2 1 1 要用到的Date对象方法 new Date 2020 4 1 getDay 计算传入的日期是星期几 返回值0表示星期天
  • 官网下载Eclipse

    1 打开Eclipse官网 https www eclipse org 也可以在百度中 搜索 Eclipse 2 点击 Download 3 点击 Download Pakeges 4 下拉 选择所要的版本和系统 5 点击 Select A
  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • C# 中Object的方法含义以及使用(详)

    如下图是object中的方法 上图来源于我阅读C 入门经典第8版的书本当中 图中明确标明方法的使用 以及含义 Equals方法 比较两个对象是否相等 在Object是所有的父类大家都知道 其中Object中方法Equals 有两种 obje
  • 【兄弟反目成仇系列】:我只是写了一个爆炸信息窗口脚本,好兄弟追了我几条街~

    文章目录 真的来咯 爆炸信息窗口 设计思路 模块准备 删除好友警告 源代码 这时你可能会问 批量获取表情包 结束语 专栏 Python零基础入门篇 Python网络蜘蛛 Python数据分析 Django基础入门宝典 小玩意儿 Web前端学
  • c#方法参数:in

    方法参数in只能读入 不能在方法内修改 它和ref一样也需要在作为实参时就已经进行了初始化 而且同ref一样 无论定义方法还是调用方法都需要加上in关键字 class Program static void Add in int num1
  • 等级测评——定级、等级划分及测评时间

    定级 在等级保护中 定级这个步骤很关键 首先我们需要知道我们这个资产是什么样的一个级别 一级二级三级 因为不同的级别表示着我们要对这个资产做相应的保护 那么我们这个定级是怎么么定级呢 参考的又是什么标准呢 首先我们需要先确认定级对象 这个对
  • R----stringr包介绍学习

    1 stringr介绍 stringr包被定义为一致的 简单易用的字符串工具集 所有的函数和参数定义都具有一致性 比如 用相同的方法进行NA处理和0长度的向量处理 字符串处理虽然不是R语言中最主要的功能 却也是必不可少的 数据清洗 可视化等
  • Verilog中$timeformat的用法

    Verilog中 timeformat的用法 更新历史 20200807 首次发布 语法 timeformat的语法如下 timeformat units number precision number suffix string mini
  • (转发)西门子S7-1200PLC之间TCP通信实例步骤

    1 软件组态 新建两个CPU 在组态界面的网络视图手绘连接两个PLC的以太网口 如下 2 在两个CPU以太网口的属性中设置IP地址 设置同一网段 方便调试 3 在PLC 1程序块中添加个背景数据块 新建接收数组跟发送数组 以方便存放接收或发
  • mysql本机地址_mysql连接时用的IP地址是不是电脑本机上的IP地址呢!

    展开全部 是root用户的话 IP就是或 lt 127 0 0 1 gt 只是代表使用本机 不是代表本机IP地址 操作方法如下62616964757a686964616fe58685e5aeb931333433623737 1 首先 利用N
  • 【工具类】比较优雅的在工具类中,用泛型方法获取枚举的值

    目录 痛点 解决 优化更灵活的泛型 痛点 在代码中 经常用到枚举 也经常用到枚举获取code 获取type 通常我们写的代码如下 public enum Status YES 1 是 NO 2 否 private int code priv
  • 科技云报道:云安全的新战场上,如何打破“云威胁”的阴霾?

    科技云报道原创 近年来 在云计算和网络安全产业的蓬勃发展下 我国云安全行业市场规模呈现高速增长态势 在网络安全市场总体规模中占比不断上升 据统计 近5年我国云安全市场保持高速增长 2021年我国云安全市场规模达到了117 7亿元 2022年
  • 移除wordpress前端自带的js和css

    wordpress在其wp head和wp foot函数中 会自动加载一些js和css 但这些js和css往往在我们实际的使用中却无法用到 这就造成了一些资源的浪费 会将我们的网站速度拖慢 我们之前发布了一篇文章清理header的文章 但是
  • lightGBM筛选特征及建模(系列文章二)

    新网银行杯 数据科学竞赛记录 之前写过一篇参加这个比赛过程中用xgboost的调参的文章 今天再记录一下用lightGBM作为特征筛选模型以及训练数据的过程 1 数据准备 新网的这个比赛主办方总共提供了三个数据集 命名分别为 train x
  • redis的持久化

    第一章 redis的持久化 1 1 持久化概述 持久化可以理解为将数据存储到一个不会丢失的地方 Redis 的数据存储在内存中 电脑关闭数据就会丢失 所以放在内存中的数据不是持久化的 而放在磁盘就算是一种持久化 为解决这个问题 redis提
  • visio交换机图标_一个完整的项目工程,交换机需要做哪些配置了?

    交换机是企业组网的重要设备 掌握交换机配置是作为网管的必备技能 这里以三层交换机的配置为例子 说一说配置的步骤 step1 配置管理地址 每个交换机需要配置一个管理地址 方便后期的远程维护 网络中的所有交换机等网络设备 可以使用一个管理VL
  • 3. Python 面向对象编程

    文章目录 Python 面向对象编程 1 3 1 面向对象编程理论 1 3 1 1 对象 1 3 1 2 类 1 3 1 3 面向对象编程的特点 1 3 2 Python 面向对象编程 1 3 2 1 Python 类与对象 1 3 2 2