2012-03-16 147 views
0

我是一个Python noob。要学习我正在做一个自然选择模拟器,但我有点卡住了。Python'NoneType'对象查询

一点背景:

我就与随机位模式,像这样的生物的列表:

population.append(chromosone.Chromosone(chromosoneSize)) 

生物品种,所以我有一个@classmethod允许基于要创建一个有机体它的父母的结合位模式,就像这样:

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

在某些点上,我从一个生物体返回基因,像这样:

高清returngene(个体经营): “” “返回基因” “”
回报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如何处理类型和对象?

+0

'maheChromo()'返回什么? – glglgl 2012-03-16 23:29:21

+1

@glglgl:'None' :) – 2012-03-16 23:30:03

+2

此外,这个词是**染色体**而不是** chromosone ** – 2012-03-16 23:35:53

回答

3

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

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

您的下一步是找出为什么population[each]的计算结果为None。据推测,您追加到​​的项目之一是None。而下面通过我们的结论

之一
chromosone.Chromosone(chromosoneSize) 

chromosone.Chromosone.makeChromo(newOrganism) 

回返None

现在你知道为什么会出现这个错误,你应该能够追查根本原因。

2

您可能忘记了将return声明添加到makeChromo()方法中。

+0

给makeChromo()返回语句给我:TypeError:必须用Chromosone实例作为第一个参数调用返回语句(必须调用)。但这是一个完全不同的错误。我是否需要我的@classmethod的return语句,因为它必须返回它创建的对象? – 2012-03-17 09:27:19

+0

@LordKinboat当然。如果你告诉它,它只能返回一些东西。如果你不提供至少一个最小的例子,没有人可以帮助你... – glglgl 2012-03-17 09:30:55

+0

道歉,我有一个构造函数接受一个值作为长度,并随机产生一些位。我需要另一个构造函数,以便创建一个接受比特串,像这样一类方法: @classmethod 高清makeChromo(CLS,位): OBJ = CLS obj.gene =位 回报OBJ – 2012-03-17 09:50:36