使用Python中的另一个对象初始化一个对象

时间:2018-11-26 14:57:50

标签: python oop methods

我有以下代码:

import xmlrpc.client as xc
class AristaSwitch():
    def __init__(self,devicename,user='admin',password='xxxxxx')
        self.url="https://"+user+":"+password+"@"+devicename+"/command-api"
        self.Server = xc.Server(self.url)     **<----i know this is not correct** 
    more code below here

我希望能够像下面这样编写我的代码:

as = AristaSwitch("192.168.1.1")
as.runCmds(1, [ "show hostname" ] )

他们这样做的方式是:

import xmlrpc.client as xc
switch = xc.Server( "https://admin:admin@172.16.130.16/command-api" ) 
response = switch.runCmds( 1, [ "show hostname" ] ) 

更新  我认为将其添加到init函数中应该可以做到

    self.InitializeRPCServer()
def InitializeRPCServer():
    switch=xc.Server(self.url)
    return switch

1 个答案:

答案 0 :(得分:0)

似乎您只是想绕开xc.Server。只需使用函数而不是类即可。

import xmlrpc.client as xc
def AristaSwitch(devicename, user='admin', password='xxxxxx'):
    url="https://"+user+":"+password+"@"+devicename+"/command-api"
    Server = xc.Server(url)
    return Server

然后就做你的事:

as = AristaSwitch("192.168.1.1")
as.runCmds(1, [ "show hostname" ] )

如果您要自定义xc.Server对象,则可以继承它:

class AristaSwitch(xc.Server):
    def __init__(self, devicename, user='admin', password='xxxxxx'):
        self.url="https://"+user+":"+password+"@"+devicename+"/command-api"
        super().__init__(self.url)

您需要将def __init__更新为自定义的url输入,但是您应该对原始实现有所了解,因为您可能会无意中覆盖了超类{ {1}}。

在此用例中,xc.Server基本上是AristaSwitch,具有自定义的实例化方法,以后可以根据需要使用自己的方法对其进行补充。