你能让一个对象可迭代吗? [复制]

Posted

技术标签:

【中文标题】你能让一个对象可迭代吗? [复制]【英文标题】:Can you make an object iterable? [duplicate] 【发布时间】:2019-08-12 16:35:30 【问题描述】:

我有一些class:

import numpy as np

class SomeClass:
    def __init__(self):
        self.x = np.array([1,2,3,4])
        self.y = np.array([1,4,9,16])

对于 Python 中的 SomeClass 的某些实例,是否有一种巧妙的方法来迭代 xy?目前要迭代我将使用的变量:

some_class = SomeClass()
for x, y in zip(some_class.x, some_class.y):
    print(x, y)

...但是您能否定义SomeClass 的行为以使其同样有效:

some_class = SomeClass()
for x, y in some_class:
    print(x, y)

感谢您的帮助!

【问题讨论】:

如果你想要一个“整洁的方式” -> for i in SomeClass(np.array([1,2,3,4]), np.array([1,4,9,16])): ``` class SomeClass(zip): def __new__(cls, *args): return zip.__new__(cls, *args) ` `` @bison 太整洁了 ... 【参考方案1】:

您可以使用__iter__ dunder 方法做到这一点:


class SomeClass:
    def __init__(self):
        self.x = np.array([1,2,3,4])
        self.y = np.array([1,4,9,16])

    def __iter__(self):
        # This will yield tuples (x, y) from self.x and self.y
        yield from zip(self.x, self.y)

for x, y in SomeClass():
   print(x,y)

【讨论】:

谢谢 - 很有魅力...

以上是关于你能让一个对象可迭代吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 all() 为空的可迭代对象返回 True? [复制]

构成可迭代对象的要素

反正有迭代数据库对象并调用它们吗? [复制]

Python——迭代器&可迭代对象

如何迭代 Yii CActiveDataProvider 对象?

你能让 html 文件在 url 中不显示“.html”吗? [复制]