TypeError:创建对象实例时,'NoneType'对象不可调用

时间:2013-06-09 10:41:54

标签: python python-2.7

嗨接下来的事情困扰着我:

我正在尝试使用下一堂课:

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文件中)。 在他的方法 init 中的另一个类我接下来要做的事情:

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

我做错了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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",
    }

并且不能使用它,因为我无法创建一个对象,这个方法并不是静态的。 解决方案:在方法之前添加@staticmethod。

另外,我在返回开关时遇到一个小错误,正确的版本是:

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

感谢所有试图提供帮助的人。