我有点困惑如何在python中返回一个列表,下面的代码返回一个空列表。我不太明白这些功能是如何运作的。
from pysnmp.entity import engine, config
from pysnmp import debug
from pysnmp.entity.rfc3413 import cmdrsp, context, ntforg
from pysnmp.carrier.asynsock.dgram import udp
from pysnmp.smi import builder
import threading
import collections
import time
MibObject = collections.namedtuple('MibObject', ['mibName',
'objectType', 'valueFunc'])
list1 = []
class Mib(object):
"""Stores the data we want to serve.
"""
def __init__(self):
self._lock = threading.RLock()
self._test_count = 0
self._test_get = 10
self._test_set = 0
def getTestDescription(self):
return "My Description"
def getTestCount(self):
with self._lock:
return self._test_count
def setTestCount(self, value):
with self._lock:
self._test_count = value
def getTestGet(self):
return self._test_get
def getTestSet(self):
return self._test_set
def setTestSet(self):
with self._lock:
self._test_set = value
class Main (list):
def doObjects(self, list1):
mib = Mib()
self.list1.append(MibObject('MY-MIB', 'testDescription', mib.getTestDescription))
self.list1.append(MibObject('MY-MIB', 'testCount', mib.getTestCount))
return self.list1
print list1
该函数返回空列表的原因是什么?
答案 0 :(得分:0)
原样,你的代码什么也不做。
我猜你是以某种方式呼叫Main()
。但是从不调用函数doObjects
。此外,您可能忘记在函数定义中添加self.list1 = list1
执行此操作的好方法可能是首先添加到脚本中:
M = Main()
return_list = M.doObjects()
print return list
你的主要功能可能/应该是:
class Main(list):
def doObjects(self, list1):
self.list1 = list1
mib = Mib()
self.list1.append(MibObject('MY-MIB', 'testDescription', mib.getTestDescription))
self.list1.append(MibObject('MY-MIB', 'testCount', mib.getTestCount))
return self.list1
但是,list1
仍在Main
之外定义,我想你应该重新考虑/重新设计你的工作流程。
答案 1 :(得分:0)
这是范围可变的问题。您实际上有三个名为list1
的不同对象:
list1 = []
类之前分配的全局变量Mib
。list1
类的Main
属性。这实际上是指一个不存在的属性,因为你从未在任何地方设置它。因此,调用doObjects
会引发AttributeError
。doObjects
采用名为list1
的参数,该参数从未在任何地方使用过。现在,在创建类时执行Main
类主体中的print语句,并打印全局list1
变量,该变量是该范围中可见的三个变量中唯一的一个。因为你永远不会向该列表附加任何内容,所以它当然是空的。
作为旁注,你的代码中有各种其他问题,应该花一些时间学习python基础知识。您的Main
班级没有理由将list
作为父班级。您永远不会创建类的实例。实际上,除了声明两个类和一个namedtuple
类...