Python'NotType'对象查询

时间:2012-03-16 23:28:13

标签: python genetic

我是一个Python noob。要了解我正在制作一个自然选择模拟器,但我有点卡住了。

一些背景知识:

我列出了具有随机位模式的生物列表,如下所示:

population.append(chromosone.Chromosone(chromosoneSize))

生物繁殖,所以我有@classmethod允许根据它的父母位模式的组合创建有机体,如下所示:

population.append(chromosone.Chromosone.makeChromo(newOrganism)) 

在某些时候,我从有机体返回基因,如下:

def returngene(个体经营):     “”返回基因“”“     return self.gene

这适用于由chromosone.Chromosone(chromosoneSize)创建的有机体,但不适用于使用chromosone.Chromosone.makeChromo(newOrganism)创建的有机体。我收到这个错误:

AttributeError: 'NoneType' object has no attribute 'returngene'

更新:我已经给我的makeChromo()一个返回,如下所示:

@classmethod
def makeChromo(cls, bits):
    obj = cls
    obj.gene = bits
    return obj

但我现在得到这个错误:

TypeError: unbound method returngene() must be called with Chromosone instance as first argument (got nothing instead)

returngene()是一个返回基因(字符串)的简单方法。

我认为我的误解在于@classmethod以及Python如何处理类型和对象?

2 个答案:

答案 0 :(得分:3)

  

AttributeError:'NoneType'对象没有属性'returngene'

当您尝试访问特殊None对象上的属性时,会发生此错误。在您的情况下,您尝试阅读方法returngene以便调用它。显然population[each]评估为None

下一步是找出population[each]评估为None的原因。据推测,您附加到population的其中一项是None。然后通过我们得出结论

chromosone.Chromosone(chromosoneSize)

chromosone.Chromosone.makeChromo(newOrganism)

返回None

现在您知道为什么会出现此错误,您应该能够找到根本原因。

答案 1 :(得分:2)

您可能忘记在return方法中添加makeChromo()语句。