我需要从外部来源提取数据。我建造了一个有一定结构的基地。我需要类型为myBase class的对象,但其名称可以自动描述我在源代码上迭代的次数。我构建了一个存储这个数字的类,并使用一个call方法返回我需要的对象。我找不到一种方法让字符串作为对象的名称,但每次生成新对象时都会自动不同。 我简化了这个示例的代码:
class myBase:
def __init__(self):
iteratedValue = None
class myIterator:
def __init__(self):
self.k = 0
def __call__(self, s):
self.k += 1
self.name = 'myData' + str(self.k)
# create an object named myData1, myData2 ...
self.name = myBase()
self.name.iteratedValue = s
print '%s name is %s for k = %i' % (self.name, self.name.iteratedValue, self.k)
# return object named myData1 type of myBase
return self.name
def DataExtraction():
# function to extract data form external source
data = myIterator()
data('Alice')
data('Ben')
DataExtraction()
我的输出是:
<__main__.myBase instance at 0x7f261b6dc6c8> name is Alice for k = 1
<__main__.myBase instance at 0x7f261b6dc6c8> name is Ben for k = 2
我需要返回一个具有特定名称的对象,我希望得到一个输出:
myData1 name is Alice for k = 1
myData2 name is Ben for k = 2
原来的问题要复杂得多。我有外部数据,每次它们来时,我都想从这些数据中提取一些值。每次我这样做的时候,我都需要一个对象来处理它,但是我需要这个具有不同名称的对象,因为最后我将它们存储在dict中以供其他方法使用。换句话说,我处理数据并将结果存储在对象myData1
中,当原始数据更改时,我再次处理它并将结果存储在myData2
等中。毕竟,我需要所有myData
对象并对其进行统计,以查看更改的情况。我不能再访问原始数据了。我需要myData
的自动名称约定,如果它能表示迭代器的话,就需要最好的名称约定。你知道吗
如何用字符串代替self.name
作为对象的名称?你知道吗
看来你最好还是用发电机。下面是一些读取数据的示例代码(实际上它是像您的示例中那样硬编码的),然后用索引名称构造数据对象。你知道吗
你已经在用
self.name = 'myData' + str(self.k)
做了。问题是您会立即用self.name = myBase()
覆盖它。我不知道你想用这个myBase()
做什么,但你可能想把它和名字分开。self.name
既可以是字符串,也可以是myBase
对象,但不能两者都是。你知道吗也许你能做到:
这样您就可以将名称和“base”作为单独的属性
self.name
和self.base
。你知道吗或者,您可以给
myBase
类一个__str__
方法。这将影响在myBase
对象上使用print
时显示的内容。但是,要做到这一点,您必须在实例化myBase
时传入所需的名称,例如:我不确定这些方法中的哪一种(或者其他方法)是你想要的。令人费解的是,您正在使对象的“name”成为
myBase
实例。我不确定对象的“名称”要表示什么,但我通常不希望对象的名称是其他对象。你知道吗顺便说一句,看起来您正在使用python2,在这种情况下,您应该使用
class someClass(object)
定义类。包括object
使您的类成为新样式的类,这基本上是您一直想要的。你知道吗编辑:如果你要做的是基于字符串创建一个名为
myData1
的变量,那么你可以做myData('Alice')
,然后神奇地让变量myData1
引用这个对象,答案是“不要这样做”。如果你想创建一堆对象并通过数字或其他标签以结构化的方式访问它们,请使用列表或字典。你知道吗为什么要担心命名对象,为什么不把它们放在
dict
中呢?你知道吗相关问题 更多 >
编程相关推荐