【发布时间】:2019-12-26 14:18:48
【问题描述】:
假设我想创建一个 python 类,它表现为另一个类的数组。在调用 __init__ 时,它会将自己识别为一个数组(可迭代);但是,当我通过其他方法再次调用它时,甚至通过索引调用时,对象变得不可迭代。我想知道我错了哪一部分,或者python类有DO和DON'T?
最后但同样重要的是,这是一种将一种对象类型简化为另一种对象类型的尝试(尝试从一个类转换为另一个类)。也许下面的代码会给出更好的说明。
示例如下: 假设我有一个对象 FOO
FOO.name = "john"
FOO.records[0].a = 1
FOO.records[0].b = 2
FOO.records[1].a = 4
FOO.records[1].b = 5
我创建了一个 python 类
class BAR:
__init__(self, record):
self.a = int(record.a)
self.b = int(record.b)
和另一个想将 BAR 类存储为数组的类
class BARS:
__init__(self,bars):
self = numpy.array([]) # regardless the array type whether python native or Numpy it does not work
for item in bars:
self = numpy.append(self, BAR(item))
所以我希望这段代码执行的是,如果我调用
A = BARS(FOO.records)
我会得到一个可迭代的 A。但这不起作用,但如果我在 BARS __init__ 中调用 SELF,它会将 SELF 视为可迭代对象。
如果不希望 python 类以这种方式运行,至少我希望你能帮助指出我,实现它的另一种逻辑和 python 方式是什么。
【问题讨论】:
-
首先要把numpy放到这里。如果您尝试存储自定义对象,它不会给您带来任何好处。使用列表
-
第二,你不能只给
self做作业。您需要一些属性名称。除此之外,我不确定我是否正确地遵循了您正在尝试做的事情。您需要__iter__使自定义类可迭代 -
对于列表,和 Numpy,我很清楚。对于
__iter__,这是我听说过的,但从未探索过。会看看。感谢您的评论。
标签: python arrays python-3.x class