我是一个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如何处理类型和对象?
答案 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()
语句。