我正在尝试处理一个简单的类,该类会填充一些列表,然后尝试检索该信息,例如:
class Foo(object):
def __init__(self):
self.src = []
self.values = []
def addItems(self, name, val):
self.src.append(name)
self.values.append(val)
def getItem(self, item):
for i, x in enumerate(self.src):
if x == item:
return self.src[i], self.values[i]
要使用此类,我首先必须实例化Foo()
,然后才开始添加和检索对象。
a = Foo()
a.addItems('A', '1')
a.addItems('B', '2')
a.src # ['A', 'B']
a.values # ['1', '2']
a.getItem('A') # ('A', '1')
有什么方法可以添加元素而不必先初始化类吗?像Foo.addItems('A', '1')
(这样就得到了TypeError: addItems() missing 1 required positional argument: 'val'
)。
我看到了其他使用@staticmethod
的相关文章,但在此示例中无法弄清楚如何使其工作。
答案 0 :(得分:1)
不确定您要牢记什么。我想您可能会得到与您所描述的相近的东西。需要两个步骤。
首先-创建模块,例如foo_module
,在其中创建并实例化您的类:
class Foo:
def __init__(self):
self.src = []
self.values = []
def addItems(self, name, val):
self.src.append(name)
self.values.append(val)
def getItem(self, item):
for i, x in enumerate(self.src):
if x == item:
return self.src[i], self.values[i]
root_foo = Foo()
src = root_foo.src
values = root_foo.values
def addItems(*args):
return root_foo.addItems(*args)
def getItem(*args):
return root_foo.getItem(*args)
第二个-导入foo_module
并使用它:
import foo_module as f_m
f_m.addItems('A', '1')
f_m.addItems('B', '2')
print(f_m.getItem('A'))
print(f_m.src)
print(f_m.values)
现在,只要您跨所有脚本访问Foo
,就可以访问相同的foo_module
实例。顺便说一下,这就是python logging
模块(root logger)的工作方式。