2013-06-09 3 views
-1

Привет следующей вещь меня беспокоит:TypeError: объект «» NoneType не вызываемый при создании экземпляра объекта

Я пытаюсь использовать следующий класс:

class GameStatus(object): 
"""Enum of possible Game statuses.""" 
__init__ = None 
NotStarted, InProgress, Win, Lose = range(4) 
def getStatus(number): 
    return{ 
     0: "NotStarted", 
     1: "InProgress", 
     2: "Win", 
     3: "Lose", 
     } 

в другом классе (оба в том же файле py). В этом еще один класс в его методе инициализации я сделать следующую вещь:

class Game(object): 
"""Handles a game of minesweeper by supplying UI to Board object.""" 
gameBoard = [] 
gs = '' 
def __init__(self, board): 
    self.gameBoard = board 
    gs = GameStatus() //THIS IS THE LINE 

И когда я пытаюсь запустить игру, я получаю следующее сообщение об ошибке:

File "C:\Users\Dron6\Desktop\Study\Python\ex6\wp-proj06.py", line 423, in __init__ 
gs = GameStatus() 
TypeError: 'NoneType' object is not callable 

Что я делаю неправильно?

+7

Зачем вам делать: '__init__ = None' – jamylak

+1

Кроме того, почему у вас есть объект, который можно легко заменить словарем, списком или кортежем? –

+0

Хмм .. Я получил этот файл как интерфейс. Поэтому я не писал. –

ответ

0

Хорошо, поэтому после небольшого исследования я нашел проблему. код я получил, был:

class GameStatus(object): 
    """Enum of possible Game statuses.""" 
    __init__ = None 
    NotStarted, InProgress, Win, Lose = range(4) 

мне нужно преобразовать nymbers их стоимости. Так я строить:

def getStatus(number): 
return{ 
    0: "NotStarted", 
    1: "InProgress", 
    2: "Win", 
    3: "Lose", 
    } 

И не мог его использовать, потому что я не мог создать объект, и это Mothod не был статичным. Решение: добавьте метод @static перед методом.

Плюс я была одна небольшая ошибка с обратным переключателем, правильная версия, которая работает так:

@staticmethod 
def getStatus(number): 
return{ 
    0: "NotStarted", 
    1: "InProgress", 
    2: "Win", 
    3: "Lose", 
    }[number] 

Спасибо всем, кто пытался помочь.

1

Вы устанавливаете GameStatus инициализатору в None:

class GameStatus(object): 
    __init__ = None 

Не делай этого. Python ожидает, что это будет метод. Если вы не хотите иметь метод __init__, совсем не указывать его. В лучшем случае, сделать его пустую функцию:

class GameStatus(object): 
    def __init__(self, *args, **kw): 
     # Guaranteed to do nothing. Whatsoever. Whatever arguments you pass in. 
     pass 

Если вы хотите создать перечислимую-подобный объект, посмотрите на How can I represent an 'Enum' in Python?

Для Python 2.7, вы можете использовать:

def enum(*sequential, **named): 
    enums = dict(zip(sequential, range(len(sequential))), **named) 
    reverse = dict((value, key) for key, value in enums.iteritems()) 
    enums['reverse_mapping'] = reverse 
    return type('Enum',(), enums) 

GameStatus = enum('NotStarted', 'InProgress', 'Win', 'Lose') 

print GameStatus.NotStarted   # 0 
print GameStatus.reverse_mapping[0] # NotStarted 
+0

Итак, проблема «init = None» возникает? Если это так, я могу использовать этот класс без экземпляра? - –

+0

Извините за мои глупые вопросы, это только то, что я новичок в классах python и не понимаю их слишком хорошо ... :( –

+0

Класс был определен и может быть использован. Не знаете, какое использование было бы будь вам. –

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