【问题标题】:What happens when you call `append` on a list?当你在列表上调用 `append` 会发生什么?
【发布时间】:2012-10-06 22:30:40
【问题描述】:

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

我有一个名为Individualclass。这是课程的相关部分:

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(…) 功能?

【问题讨论】:

    标签: python class append implementation


    【解决方案1】:

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

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

    不需要魔法。

    【讨论】:

    • 该死!我显然有隧道视觉哈哈!不过,您能否解释一下当我致电list.append 时会发生什么?
    • @inspectorG4dget:列表类型(用C实现)定义了一个方法.append(),由解释器调用;它需要一个参数。该方法将元素添加到列表中。除了在 C 中实现之外,它并没有什么神奇之处。
    • @inspectorG4dget:看看UserList module 的源代码,它在自定义类中包装了一个列表。
    猜你喜欢
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2021-10-18
    • 2013-04-29
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多