python - 在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)
解决方案
最简单的方法是在主函数中创建节点并将其作为参数传递给每个后续函数。
例如:
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
才能返回静态实例
推荐阅读
- ruby-on-rails - Rails - 一对一关联
- bash - 如何检测 Git 存储库工作树中的合并冲突(非裸)
- java - SignalR 调用已取消
- android - 调用 webview.reload 方法后恢复 webview 状态。可能吗?
- heroku - 如何找到 Heroku 应用程序的本地目录?
- c# - 为什么我的程序在调用“OpenAsync()”时会终止?
- sorting - SSRS 在 Tablix SSRS 中对列中的数据进行排序
- internet-explorer - 如何阻止 Internet Explorer 弹出窗口的发生?
- ios - 如何实现不同纵横比的不同视图布局?
- php - How to fix json_decode out put