当我制作遗传算法时,我有一个 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/