【问题标题】:Python 'NoneType' object queryPython 'NoneType' 对象查询
【发布时间】:2012-03-16 23:28:13
【问题描述】:

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

一点背景:

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

population.append(chromosone.Chromosone(chromosoneSize))

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

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

有时我会从生物体中返回基因,如下所示:

def 返回基因(自我): """归还基因"""
返回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 如何处理类型和对象?

【问题讨论】:

  • maheChromo() 返回什么?
  • 另外,这个词是 chromosome 而不是 chromosone
  • @David Heffernan,请注意!
  • 感谢您的更新。但是,如果我们看不到您的 returngene() 是如何定义的,我们将无法帮助您...
  • def returngene(self): return self.gene

标签: python genetic


【解决方案1】:

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

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

下一步是弄清楚为什么population[each] 的计算结果为None。大概您附加到population 的项目之一是None。然后通过我们得出结论,其中之一

chromosone.Chromosone(chromosoneSize)

chromosone.Chromosone.makeChromo(newOrganism)

返回None

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 给 makeChromo() 一个 return 语句给了我:TypeError: unbound method returngene() must be called with Chromosone instance 作为第一个参数(什么都没有)。但这是一个完全不同的错误。我是否需要我的 @classmethod 的 return 语句,因为它必须返回它创建的对象?
    • @LordKinboat 当然。如果你告诉它这样做,它只能返回一些东西。如果你不提供至少一个最小的例子,没有人可以帮助你......
    • 抱歉,我有一个构造函数,它接受一个值作为长度并随机生成一些位。我需要另一个构造函数,因此创建了一个接受位字符串的类方法,如下所示:@classmethod def makeChromo(cls, bits): obj = cls obj.gene = bits return obj
    • 您为什么不更新您的问题以使其易于理解?所以我只能猜测:如果cls 是一个要实例化的类,也许你应该做obj = cls()。否则,它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2014-05-31
    • 2013-12-01
    • 2022-07-17
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多