2012-03-16 3 views
0

Я - питон 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' 

UPDATE: Я дал 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()' return? – glglgl

+1

@glglgl: 'None' :) –

+2

Кроме того, слово ** хромосома **, а не ** хромозон ** –

ответ

3

AttributeError: 'NoneType' object has no attribute 'returngene'

Эта ошибка возникает, когда вы пытаетесь получить доступ к атрибуту специального объекта None. В вашем случае вы пытаетесь прочитать метод returngene, чтобы позвонить ему. Очевидно, population[each] оценивает по методу None.

Ваш следующий шаг - это выяснить, почему population[each] оценивает None. Предположительно, один из предметов, которые вы добавили к population, был None. И после этого через мы приходим к выводу, что один из

chromosone.Chromosone(chromosoneSize) 

или

chromosone.Chromosone.makeChromo(newOrganism) 

возвращается None.

Теперь вы знаете, почему возникает эта ошибка, вы должны иметь возможность отслеживать основную причину.

2

Возможно, вы забыли добавить заявление return в свой метод makeChromo().

+0

Предоставление makeChromo() оператора return дает мне: TypeError: unbound метод returngene() должен быть вызван с экземпляром Chromosone в качестве первого аргумента (вместо этого ничего не получается). Но это совсем другая ошибка. Мне нужен оператор return для моего метода @classmethod, потому что он должен вернуть объект, который он создал? –

+0

@LordKinboat Конечно. Он может только что вернуть, если вы скажете это сделать. И никто не может вам помочь, если вы не представите хотя бы минимальный пример ... – glglgl

+0

Извините, у меня есть конструктор, который принимает значение как длину и произвольно генерирует некоторые биты. Мне нужен еще один конструктор так создал метод класса, который принимает строку битов, например, так: @classmethod четкости makeChromo (ЦБС, биты): OBJ = obj.gene CLS = биты возврат OBJ –

Смежные вопросы