Python';非类型';对象查询

Python';非类型';对象查询,python,genetic,Python,Genetic,我是一个巨蟒迷。为了学习,我正在制作一个自然选择模拟器,但我有点卡住了 一点背景: 我列出了一个随机位模式的生物列表,如下所示: population.append(chromosone.Chromosone(chromosoneSize)) population.append(chromosone.Chromosone.makeChromo(newOrganism)) @classmethod def makeChromo(cls, bits): obj = cls ob

我是一个巨蟒迷。为了学习,我正在制作一个自然选择模拟器,但我有点卡住了

一点背景:

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

population.append(chromosone.Chromosone(chromosoneSize))
population.append(chromosone.Chromosone.makeChromo(newOrganism)) 
@classmethod
def makeChromo(cls, bits):
    obj = cls
    obj.gene = bits
    return obj
生物体会繁殖,所以我有一个
@classmethod
来允许生物体基于其父比特模式的组合来创建,如下所示:

population.append(chromosone.Chromosone(chromosoneSize))
population.append(chromosone.Chromosone.makeChromo(newOrganism)) 
@classmethod
def makeChromo(cls, bits):
    obj = cls
    obj.gene = bits
    return obj
在某些情况下,我从生物体中返回基因,如下所示:

population.append(chromosone.Chromosone(chromosoneSize))
population.append(chromosone.Chromosone.makeChromo(newOrganism)) 
@classmethod
def makeChromo(cls, bits):
    obj = cls
    obj.gene = bits
    return obj
def returngene(自我): “返回基因”
回归自我基因

这适用于由
chromosone.chromosone(chromosoneSize)
创建的生物体,但不适用于由
chromosone.chromosone.makeChromo(新生物体)
创建的生物体。我得到这个错误:

AttributeError: 'NoneType' object has no attribute 'returngene'
TypeError: unbound method returngene() must be called with Chromosone instance as first argument (got nothing instead)
更新:我已返回makeChromo(),如下所示:

population.append(chromosone.Chromosone(chromosoneSize))
population.append(chromosone.Chromosone.makeChromo(newOrganism)) 
@classmethod
def makeChromo(cls, bits):
    obj = cls
    obj.gene = bits
    return obj
但我现在得到了这个错误:

AttributeError: 'NoneType' object has no attribute 'returngene'
TypeError: unbound method returngene() must be called with Chromosone instance as first argument (got nothing instead)
returngene()是一个返回基因(字符串)的简单方法

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

AttributeError:“非类型”对象没有属性“returngene”

当您尝试访问特殊
None
对象上的属性时,会发生此错误。在本例中,您试图读取方法
returngene
,以便调用它。显然,
总体[每个]
的计算结果为
None

下一步是找出为什么
population[each]
的计算结果为
None
。大概您添加到
总体
的项目之一是
。通过这一点,我们得出以下结论:

chromosone.Chromosone(chromosoneSize)

返回
None

现在您知道了发生此错误的原因,应该能够找到根本原因

AttributeError:“非类型”对象没有属性“returngene”

当您尝试访问特殊
None
对象上的属性时,会发生此错误。在本例中,您试图读取方法
returngene
,以便调用它。显然,
总体[每个]
的计算结果为
None

下一步是找出为什么
population[each]
的计算结果为
None
。大概您添加到
总体
的项目之一是
。通过这一点,我们得出以下结论:

chromosone.Chromosone(chromosoneSize)

返回
None


现在您知道了发生此错误的原因,您应该能够找到根本原因。

可能您忘记了将
return
语句添加到
makeChromo()
方法。

可能您忘了将
return
语句添加到
makeChromo()
方法。

什么是
maheChromo()
return?另外,这个词是染色体而不是染色体chromosone@David赫弗南,注意到了!谢谢你的更新。但是如果我们看不到你的
returngene()
是如何定义的,我们就帮不了你…def returngene(self):return self.gene什么是
maheChromo()
return?还有,这个词是染色体而不是染色体chromosone@David赫弗南,注意到了!谢谢你的更新。但是如果我们看不到您的
returngene()
是如何定义的,我们就无法帮助您…def returngene(self):return self.geneGiving makeChromo()返回语句给出了:TypeError:必须使用Chromosone实例作为第一个参数调用unbound方法returngene()(没有得到任何结果)。但这是一个完全不同的错误。我的@classmethod是否需要一个return语句,因为它必须返回它创建的对象?@LordKinboat当然需要。只有你让它这样做,它才能返回一些东西。如果你不提供一个最小的例子,没有人能帮你…抱歉,我有一个构造函数,它接受一个值作为长度,并随机生成一些位。我需要另一个构造函数,所以创建了一个接受一串位的类方法,比如:@classmethod def makeChromo(cls,bits):obj=cls obj.gene=bits return obj为什么不更新您的问题以使其可读?所以我只能猜测:如果
cls
是一个要实例化的类,那么您可能应该执行
obj=cls()
。否则,它应该可以工作。给makeChromo()一个return语句会给我:TypeError:必须使用Chromosone实例作为第一个参数调用unbound方法returngene()。但这是一个完全不同的错误。我的@classmethod是否需要一个return语句,因为它必须返回它创建的对象?@LordKinboat当然需要。只有你让它这样做,它才能返回一些东西。如果你不提供一个最小的例子,没有人能帮你…抱歉,我有一个构造函数,它接受一个值作为长度,并随机生成一些位。我需要另一个构造函数,所以创建了一个接受一串位的类方法,比如:@classmethod def makeChromo(cls,bits):obj=cls obj.gene=bits return obj为什么不更新您的问题以使其可读?所以我只能猜测:如果
cls
是一个要实例化的类,那么您可能应该执行
obj=cls()
。否则,它应该会起作用。