python - 我可以使我的类可迭代,仅使用其可迭代属性之一吗?

标签 python iterable

当我制作遗传算法时,我有一个 Individu 类:

class Individu:
  genotype: List[int]
  code: List[int]
  phenotype: List[List[Client]]
  fitness: float

大多数时候,程序中仅使用属性基因型(用于交叉 parent 或计算适应度)。

现在,当我需要使用 p1.genotype[] 时,我可以让 Individu 可迭代,这样我就可以编写 p1[ ] 而是一个坏主意?

我觉得这会让我的程序对我来说更干净,但同时可能会让其他人感到困惑或“破坏”某种编程最佳实践。

最佳答案

您似乎在谈论索引,而不是迭代本身。索引由 __getitem__ 方法处理,而迭代由 __iter__/iter 处理。您只需为您的类定义这些方法即可将工作转发给 genotype 属性:

def __getitem__(self, key): return self.genotype[key]
def __iter__(self): return iter(self.genotype)

就我个人而言,我不会这样做,因为这种间接寻址是额外的工作,可能不是您想要转发到 genotype 属性的所有内容,并且掩盖了可迭代的真正位置。但如果它适合您的用例,那就去做吧。

关于python - 我可以使我的类可迭代,仅使用其可迭代属性之一吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68343067/

相关文章:

python - 可迭代列表列表的迭代器

Java:list.listIterator()返回的对象属于哪个CLASS?

python - 如何在 Python/Tkinter 中使用浏览按钮显示文件路径

python - 使用 pxssh(python 的 ssh 模块)时读取非阻塞错误

python - 通过在 Python 中链接可迭代对象来表示递归

python - 在python循环中匹配整数

python - 复杂的请引用另一张表

Python 装饰器在调用函数之前的导入期间运行

python - 使用 selenium 抓取数据并将其添加到字典中以在数据框中使用

java - 如何在Java中使用Iterator/Iterable?