Python类中\\uuu init\uuu数组之后的不可写对象

Python类中\\uuu init\uuu数组之后的不可写对象,python,arrays,python-3.x,class,Python,Arrays,Python 3.x,Class,假设我想创建一个python类,其行为类似于另一个类的数组。调用uuu init uuuu时,它将自己识别为一个数组(iterable);但是,当我通过其他方法再次调用它,或者甚至通过索引调用它时,对象将变得不可iterable。我想知道我把它的哪一部分弄错了,或者说,python类有应该做的和不应该做的 最后但并非最不重要的一点是,这是一种将一种对象类型简化为另一种对象类型的尝试(尝试从一个类转换为另一个类)。也许下面的代码会给出更好的解释 示例如下: 假设我有一个对象FOO FOO.name

假设我想创建一个python类,其行为类似于另一个类的数组。调用uuu init uuuu时,它将自己识别为一个数组(iterable);但是,当我通过其他方法再次调用它,或者甚至通过索引调用它时,对象将变得不可iterable。我想知道我把它的哪一部分弄错了,或者说,python类有应该做的和不应该做的

最后但并非最不重要的一点是,这是一种将一种对象类型简化为另一种对象类型的尝试(尝试从一个类转换为另一个类)。也许下面的代码会给出更好的解释

示例如下: 假设我有一个对象FOO

FOO.name=“约翰”
FOO.records[0]。a=1
FOO.records[0].b=2
FOO.records[1].a=4
FOO.records[1].b=5
我创建了一个python类

类栏:
__初始化(自我,记录):
self.a=int(record.a)
self.b=int(record.b)
和另一个类,它希望将BAR类存储为数组

类栏:
__初始(自,条形):
self=numpy.array([])#不管数组类型是python本机还是numpy,它都不起作用
对于条形图中的项目:
self=numpy.append(self,条(项))
所以我希望这段代码能够执行的是,如果我调用

A=bar(食物记录)
我会得到一个iterable A,但这不起作用,尽管如果我在BARS中调用SELF,它会将SELF视为iterable对象


如果你不希望python类以这种方式运行,至少我希望你能帮我指出,实现它的另一种逻辑和python方式是什么。

也许在上面的评论中给出提示后回答我自己的问题会更好

事实证明,在课堂上帮助自己本身就是一种“不要”(愚蠢的我试图找到一条捷径)

要实现一个iterable类,需要使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

因此,上面的代码应该是这样的

class BARS:
    def __init__(self, records):
        self.records = [] # Use list for simplicity
        for record in records:
            self.records.append(BAR(record))

    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        if self.n < len(self.records):
            result = self.records[self.n]
            self.n += 1
            return result
        else:
            raise StopIteration

    def __getitem__(self, key):
        return self.records[key]    
类栏:
定义初始化(自我,记录):
self.records=[]#为了简单起见,请使用列表
记录中的记录:
self.records.append(条(记录))
定义(自我):
self.n=0
回归自我
定义下一个(自我):
如果self.n

最终,这将产生一个迭代和索引可访问对象。

第一件事是在这里删除numpy。如果您试图存储自定义对象,它不会给您带来任何好处。使用listSecond,您不能只对
self
进行赋值。您需要一些属性名。除此之外,我不确定我是否正确地遵循了你的意图。您将需要
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。对于
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu iter\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我来看看。谢谢你的评论。转得好。对于一个新用户来说,接受反馈并实际研究它是很不寻常的(感谢您的feedbak;)