首页 > 解决方案 > 在python中使用实例变量

问题描述

我正在使用公共 API 以编程方式使用 python 语言配置网络交换机。我对python不是很有经验,我正在寻求一些帮助来重构以下代码:

def main():
    conf_port_channel('sw1.eos')
    conf_vlan('4094', 'sw1.eos')
    conf_trunk_group('sw1.eos')
    conf_spanning_tree('sw1.eos')
    conf_svi('sw1.eos', '10.0.0.1/30')
    conf_mlag_vlan('sw1.eos', '10.0.0.2')
    conf_mlag_interface('sw1.eos')

在主要方法中,我将 sw1.eos 参数传递给许多方法,然后创建网络节点的实例。下面是创建节点实例的方法之一的示例。

def conf_trunk_group(sw):
    node = pyeapi.connect_to(sw).api('interfaces')
    node.configure(['interface Port-Channel 10', 'switchport trunk group mlagpeer'])

如何重构此代码以在所有后续方法调用中使用主中创建的一个“节点”实例?

node = pyeapi.connect_to(sw)

标签: python

解决方案


最简单的方法是在主函数中创建节点并将其作为参数传递给每个后续函数。

例如:

def conf_trunk_group(node):    
    node.configure(['interface Port-Channel 10', 'switchport trunk group mlagpeer'])

def main():
    node = pyeapi.connect_to('sw1.eos').api('interfaces')
    conf_port_channel('sw1.eos')
    conf_vlan('4094', 'sw1.eos')
    conf_trunk_group(node)
    conf_spanning_tree('sw1.eos')
    conf_svi('sw1.eos', '10.0.0.1/30')
    conf_mlag_vlan('sw1.eos', '10.0.0.2')
    conf_mlag_interface('sw1.eos')

此答案假定您编写了所有函数。如果没有,唯一的方法就是通过一些可能不值得的魔法。您必须覆盖构造函数pyeapi才能返回静态实例


推荐阅读