​网工速通Python-part6-类与对象
  vYgR16aEGw5K 2023年11月02日 20 0

前言

《从零开始NetDevOps》是本人8年多的NetDevOps实战总结的一本书(且称之为书,通过公众号连载的方式,集结成册,希望有天能以实体书的方式和大家相见)。

NetDevOps是指以网络工程师为主体,针对网络运维场景进行自动化开发的工作思路与模式,是2014年左右从国外刮起来的一股“网工学Python"的风潮,最近几年在国内逐渐兴起。本人在国内某大型金融机构的数据中心从事网络自动化开发8年之久,希望能通过自己的知识分享,给大家呈现出一个不同于其他人的实战为指导、普适性强、善于抠细节、知其然知其所以然风格、深入浅出的NetDevOps知识体系,给大家一个不同的视角,一个来自于实战中的视角。

由于时间比较仓促,文章中难免有所纰漏,敬请谅解,同时笔者也会在每个章节完成后进行修订再发布,欢迎大家持续关注

本系列文章会连载于“NetDevOps加油站”公众号,欢迎大家点赞关注!


2.7 类与对象

面向对象编程是一门稍微深奥一点的知识了,针对初学者,我们做简单讲解,方便我们对代码的理解,不做过深入的讲解。

面向对象首先要搞清楚的是类(Class)与对象(Object)。类是对一类事物的抽象总称,比如人类、交换机、网络设备、端口。对象是类的一个实例化,是一个相对而言的实体,比如小明是具体的一个人,as01交换机是具体的一个交换机,as01交换机的Eth1/1端口是一个具体的端口,这些都是具体的,是对象。在编程中,根据类创建一个对象的过程,我们称之为实例化。

类的定义与对象的实例化,通过一段代码,我们理解即可。

类的定义

首先一个比较简单的类的定义如下:

class Switch(object): # 通过Class <类名>
    description = '提供交换能力的网络设备'

    def __init__(self, ip, name, username, password):
        self.ip = ip
        self.name = name
        self.username = username
        self.password = password
        self.connect()  # 调用实例化后对象的方法进行登录连接

    def connect(self):
        # 在方法中调用自己的属性
        print('使用用户:{}登录交换机完成'.format(self.username))

    def send_commad(self, cmds):
        # 接受参数发送多条命令
        for cmd in cmds:
            print('发送命令{}成功'.format(cmd))

类首先要按照class <类标识符>的形式进行类的定义。

description是类属性,它是这类事物所共同拥有的一个属性。比如对交换机的定义是大家共有的,比如人类的眼睛数量是2个,这也是共有的类属性。

__init__是构造方法,类中的函数称为方法(method)。我们通过对创建对象的时候需要按照这个构造方法的参数来传参赋值,详见对象的实例化,在构造方法中一般进行属性的赋值,同时可以执行一些复杂的方法或者函数,比如示例中模拟登录了一个设备。。

self.ip等变量是对象属性,属于实例化后的对象拥有的属性,它可以在方法中创建或者修改一个对象属性。

connectsend_commad以及__init__这种以self开头的方法,是对象方法,只有实例化后才可以调用,其中self是指实例化的那个对象,是一种约定俗称的写法,调用对象方法的时候self无需也不能赋值,这个是由Python自动完成的,我们只需要关注self以后的参数,我们可以认为self是一个小透明的参数,无需关注。

对象的实例化与使用

定义好类之后,我们就可以使用类名进行实例化出一个对象。

# 实例化,<类名>(<__init__方法的参数赋值>)
dev = Switch(ip='192.168.1.1',name='as01',username='admin',password='admin123')

# 使用点来访问对象属性和类属性,<对象>.<属性名>
dev_ip = dev.ip

# 使用点来调用对象方法 <对象>.<对象方法>(<参数>)
cmds = ['show version','show clock']
dev.send_commad(cmds)

对象实例化只需通过类名结合__init__方法的调用即可实例化,形如<类名>(<__init__方法的参数赋值>)

访问对象属性和类属性,直接在对象后使用标点.就可以访问,也可以修改,但是根据实际业务逻辑,一般不建议修改类属性。

调用对象的方法也是通过点.接方法名,赋值除self以外的其他参数即可。

以上这个类是一段伪代码,定义了一个交换机的类,实际情况远比这个复杂。大家可能有疑问,已经有了函数可以提高我们的编程效率,为什么还要搞出一个对象呢?面向对象编程有什么好处吗?

不严谨的简单理解:面向对象编程的抽象层次更高,复用性强,开发效率更高。当然面向对象编程由于相关封装,也会牺牲一些性能,但是在计算过程的年代,这点性能不值一提。

作为初学者,日常脚本的编写在函数式编程即可,我们也会以函数式编程为重点讲解,在初学阶段简单了解面向对象编程,可以让我们对自己一些工具包的使用了解的更加清晰。在Python中万物皆为对象,我们前面讲的基础数据结构也是对象,只不过是实例化和调用方法时Python帮我们处理好,这点不同于普通的对象实例化。在了解了面向对象编程之后,回过头去再看以前的知识点,比如字符串的方法,我们可能了解得更清楚更透彻一些,且为我们后面学习更高阶的知识做好准备。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zwkHF6kqOgW1   2023年11月02日   63   0   0 python
  rRtXVg6Hk601   2023年11月02日   48   0   0 python
  zwkHF6kqOgW1   2023年11月02日   32   0   0 python
vYgR16aEGw5K