python - 当您在列表中调用 `append` 时会发生什么?

标签 python class append implementation

首先,我不知道这个问题最合适的标题是什么。竞争者:“如何在自定义类中实现 list.append”。

我有一个名为Individual。这是类(class)的相关部分:

from itertools import count
class Individual:
    ID = count()
    def __init__(self, chromosomes):
        self.chromosomes = list(chromosomes)
        self.id = self.ID.next()

这是我想对这个类做的事情:

假设我实例化了一个没有染色体的新个体:indiv = Individual([]) 并且我想稍后为这个个体添加一个染色体。目前,我必须这样做:

indiv.chromosomes.append(makeChromosome(params))

相反,我最想做的是:

indiv.append(makeChromosome(params))

效果相同。

所以我的问题是:当我在列表上调用 append 时,到底发生了什么?是否有被调用的 __append__(或 __foo__)?在我的 Individual 类中实现该功能是否能让我获得所需的行为?

例如,我知道我可以在 Individual 中实现 __contains__ 以启用 if foo in indiv 功能。我将如何启用 indiv.append(...) 功能?

最佳答案

.append()只是一种接受一个参数的方法,您可以轻松地自己定义一个:

def append(self, newitem):
    self.chromosomes.append(newitem)

不需要魔术方法。

关于python - 当您在列表中调用 `append` 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12921222/

相关文章:

python - 对基类的行为感到困惑

python - Django South - 为已经填充表格的应用程序创建初始迁移

c++ - 如何将使用参数包和类型名的类作为函数的输入参数(C++)

javascript - 如何将 javascript 应用于使用 append() 创建的元素?

go - 将内容 append 到特定部分中的 Go 模板

python - Numpy 向量化算法对具有相同时间戳的数字求和

python - 从 Python 类获取特定方法子集

c++ - 变量已在 .obj 中定义,但没有循环包含

c# - 我应该将任务封装在一个类中吗?

apache-spark - PySpark Palantir Foundry 中增量追加更新的行(基于某些列)