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です。おそらく、追加したアイテムの 1 つpopulationNone. そして、それに続いて、次のいずれかを結論付けます

chromosone.Chromosone(chromosoneSize)

また

chromosone.Chromosone.makeChromo(newOrganism)

戻りますNone

このエラーが発生する理由がわかったので、根本原因を追跡できるはずです。

于 2012-03-16T23:30:10.923 に答える
2

returnメソッドにステートメントを追加するのを忘れた可能性がありますmakeChromo()

于 2012-03-16T23:31:20.130 に答える