2012-03-16 65 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