我可以只使用类的一个iterable属性来使类iterable吗?

2024-05-15 03:57:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

大多数情况下,程序中只使用属性genotype(用于跨越父项或计算适应度)

现在,当我需要使用p1.genotype[]时,我可以不总是写它,而是让Individu可写,这样我就可以写p1[]了,或者这是个坏主意

我觉得这会让我的程序更干净,但同时也会让其他人感到困惑,或者“打破”某种编程最佳实践


Tags: 程序client属性情况codefloatlistclass
1条回答
网友
1楼 · 发布于 2024-05-15 03:57:59

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

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

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

相关问题 更多 >

    热门问题