如何在python中的aonther程序中添加类方法的变量?

时间:2016-02-17 07:57:16

标签: python ns-3 mininet

我在ns3.py中有一个名为WIFISegment的类:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="12345"
    android:inputType="number"/>

此类有一个名为 def add的方法(self,node,port = None,intfName = None,mode = None),在此方法中我们定义 mobilityhelper 即可。

我想知道我是否可以在另一个程序中使用mobilityhelper。 例如,我写了另一个程序,在我的程序中导入WIFISegment,然后定义wifi = WIFISegment(),我可以使用它的方法“添加”如下 wifi.add(h1)(h1是主机这里)。

我的问题是如何在我的其他程序中使用mobilehelper的add()方法。因为我每次都需要设置新的移动性。

由于 Farzaneh

2 个答案:

答案 0 :(得分:2)

显而易见的方法是返回它:

return tb, mobilityhelper

并像这样使用它:

original_ret_value, your_mobilityhelper = wifi.add(h1)

但这会破坏与旧代码的兼容性(add返回TBIntf,但现在它返回元组)。您可以添加可选参数以指示add方法是否应返回mobilityhelper:

def add( self, node, port=None, intfName=None, mode=None, return_mobilityhelper=False ):
    ...
    if return_mobilityhelper:
        return tb, mobilityhelper
    else:
        return tb

现在,如果您使用add,就像之前一样,它的行为与wifi.add(h1)之前的行为相同。但您可以使用新参数然后获取您的mobilityhelper

whatever, mobilityhelper = wifi.add(h1, return_mobilityhelper=True)

returned_tuple = wifi.add(h1, return_mobilityhelper=True)
mobilityhelper = returned_tuple[1]

另一种方法是修改参数(列表)

def add( self, node, port=None, intfName=None, mode=None, out_mobilityhelper=None):
    ...
    if hasattr(out_mobilityhelper, "append"):  
        out_mobilityhelper.append(mobilityhelper)
    return tb

它仍旧与您的旧代码兼容,但您可以将列表传递给参数,然后提取您的mobilityhelper

mobhelp_list = []
wifi.add(h1, out_mobilityhelper=mobhelp_list)
mobilityhelper = mobhelp_list[0]

答案 1 :(得分:1)

mobilityhelper在类WIFISegment add方法中定义如下(如上一个问题所述):

        mobilityhelper = ns.mobility.MobilityHelper()

        # Install mobility object to the ns-3 node.
        mobilityhelper.Install( node.nsNode )

当我们使用wifi.add()时,它会安装在每个主机(node.nsNode)上。

现在在我的其他程序中,我想使用此mobilehelper,但安装了一种新的移动性,如下所示:

      mobilityhelper.SetPositionAllocator ("ns3::GridPositionAllocator",
                             "MinX", ns.core.DoubleValue(0.0),
                             "MinY", ns.core.DoubleValue(0.0),
                             "DeltaX", ns.core.DoubleValue(130.0),
                             "DeltaY", ns.core.DoubleValue(100.0),
                             "GridWidth", ns.core.UintegerValue(2),
                             "LayoutType", ns.core.StringValue("RowFirst"))

     mobilityhelper.SetMobilityModel("ns3::ConstantPositionMobilityModel")


        # Install mobility object to the ns-3 node.
        mobilityhelper.Install( h1 )

现在想知道如何在我的新程序中使用该移动性并为我的节点安装新的移动性。

我希望我不会让你感到困惑。