0

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

一点背景:

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

population.append(chromosone.Chromosone(chromosoneSize))

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

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

在某些时候,我会从生物体中返回基因,如下所示:

def returngene(self): """返回基因"""
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() 是一个返回基因(字符串)的简单方法。

我认为我的误解在于@classmethodPython 如何处理类型和对象?

4

2 回答 2

3

AttributeError:“NoneType”对象没有属性“returngene”

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

您的下一步是找出population[each]计算结果为的原因None。大概您附加到的项目之一populationNone. 然后通过我们得出结论,其中之一

chromosone.Chromosone(chromosoneSize)

或者

chromosone.Chromosone.makeChromo(newOrganism)

返回None

现在您知道为什么会发生此错误,您应该能够追查根本原因。

于 2012-03-16T23:30:10.923 回答
2

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

于 2012-03-16T23:31:20.130 回答