Python用户定义的数据类型

时间:2010-11-19 11:36:44

标签: python

我正在用Python写一个类似流氓的游戏,并定义了我的Tile类。瓷砖可以是封闭的,墙壁或地板。我希望能够按照

的方式写一些内容
self.state = Blocked

类似于使用布尔值的方式(但有三个值)。

我有一个很好的方法来定义数据类型以使我能够这样做吗?

由于

3 个答案:

答案 0 :(得分:4)

对于三个常量,我将使用枚举'pattern'的解包版本:

Blocked, Wall, Floor = range(3)

如果它比这更复杂,我会看看其他enum types in python

答案 1 :(得分:0)

class State:
   Blocked=1
   Wall=2
   Floor=3

some = State.Blocked

答案 2 :(得分:0)

使用位标志。 您可以搜索谷歌以获取更多信息,最简单的术语是您可以以二进制形式存储布尔值,因为True / False是一个位,您可以使用4位或1个字节来存储4个不同的布尔值。

所以,请这样说:

python语法:
a = 0x0#[这是位标志或二进制数<class 'int'>或python27 <type 'int'>中的python表示形式]

二进制表示:
0x0 = 000 [零为零,二元变量的长度无关紧要]
0x1 = 001 [1]
0x2 = 010 [2]
0x4 = 100 [4]
所以这里我们有3个或更多不同的布尔位置我们可以检查,因为000000000001 == 001 == 01 == 0x1

但是在位标志中 0x3 = 011 [3 = 2 + 1]
0x5 = 101 [5 = 4 + 1]
0x6 = 110 [6 = 4 + 2]
0x7 = 111 [7 = 4 + 2 + 1]

最简单的条款 我会给你一个比较语法&,这意味着AND,这意味着&#39; 1&#39;位标志必须相同。因此实际上,0x1和0x2 == 0x2将为假,因为001&amp; 010没有&#39; 1&#39;在同一个地方

所以如果你想检查位标志中的两种类型,只需将它们加在一起并检查,语法如上 例如:0x3&(0x1+0x2)==(0x1+0x2)

我希望这会有所帮助。快乐的谷歌搜索。