嗨接下来的事情困扰着我:
我正在尝试使用下一堂课:
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
我做错了什么?
答案 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]
感谢所有试图提供帮助的人。