【发布时间】:2013-10-23 13:21:16
【问题描述】:
我看到了页面:
我熟悉 this SO question 在 Python 中创建枚举。但是,我在任何地方都找不到具有函数的枚举示例。
我主要是一名 Java 程序员。 我用 Java 写了这段代码:
public enum Role {
SOLDIER(4),
DEMOMAN(2),
SCOUT(4),
MEDIC(2);
private final int maxPlayers;
private Role(int maxPlayers) {
this.maxPlayers = maxPlayers;
}
public int getMaxPlayers() { return maxPlayers; }
}
我尝试在 Python 中做同样的事情:
class Klass:
SCOUT = 1
SOLDIER = 2
DEMOMAN = 3
MEDIC = 4
@staticmethod
def maxPlayers(klass):
return {
Klass.SCOUT : 4,
Klass.SOLDIER : 4,
Klass.DEMOMAN : 2,
Klass.MEDIC : 2,
}[klass]
出于某种原因。我觉得我做错了。 在 Python 中将函数与枚举关联的最佳做法是什么?
我实际上并不关心建议的答案是否不使用枚举;我只是想了解在 Python 中实现上述 Java 代码的最佳实践。
我愿意在下面使用这个枚举:
class Players(dict):
def countKlass(self, klass):
count = len(filter(lambda x: x == klass, self.values()))
return count
【问题讨论】:
-
你的Java代码不是纯枚举;它是枚举的子类。如果您只是更改 Klass 使其从 Enum (链接中提到的 PEP 435 枚举)子类化,它应该完全按照您的预期工作。它们是整数,因此查找字典似乎很简单。
-
这可能会有所帮助:stackoverflow.com/questions/36932/…
-
我的 python 代码有效。但我想这不是最佳做法。
-
不使用枚举而只制作字典会不会有问题。例如,您必须传递
maxPlayers字符串'SOLDIER'。我对您的代码知之甚少,不知道这是否容易调整,但大多数人不在 python 中使用枚举。 -
我不太关心容易与否。我只是想了解在 python 中这样做的最佳实践。