Python用户定义的数据类型

Python用户定义的数据类型,python,Python,我正在用Python编写一个类似流氓的游戏,并且正在定义我的Tile类。瓷砖可以是砖、墙或地板。我希望能够写一些类似于 self.state = Blocked 类似于使用布尔值(但有三个值) 是否有一种很好的方法来定义数据类型,使我能够这样做 感谢您提供了三个常量,我将使用enum“pattern”的解包版本: Blocked, Wall, Floor = range(3) 如果它变得比这更复杂,我会看看其他的。使用位标志。 你可以在谷歌上搜索更多信息,用最简单的术语来说,你可以以二进制形

我正在用Python编写一个类似流氓的游戏,并且正在定义我的
Tile
类。瓷砖可以是砖、墙或地板。我希望能够写一些类似于

self.state = Blocked
类似于使用布尔值(但有三个值)

是否有一种很好的方法来定义数据类型,使我能够这样做


感谢您提供了三个常量,我将使用enum“pattern”的解包版本:

Blocked, Wall, Floor = range(3)
如果它变得比这更复杂,我会看看其他的。

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

这样说吧:

python语法:
a=0x0
#[这是位标志或二进制数的python表示形式
或在python27
]

二进制表示:
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]

用最简单的话来说 我将给出一种比较语法
&
,这意味着和,这意味着位标志中“1”的位置必须相同。因此,实际上,0x1&0x2==0x2将为False,因为001&010在同一位置没有“1”

因此,如果您想在bit flag中检查两种类型,只需将它们添加到一起,然后使用上面的语法进行检查。
示例:
0x3&(0x1+0x2)==(0x1+0x2)

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

在Python3中不需要使用tuple(range(3)),对生成器的tuple赋值工作得很好(我刚刚测试过)。IMO的第二个版本要好得多。它的结果与这个版本相同,但不太容易出错。
class State:
   Blocked=1
   Wall=2
   Floor=3

some = State.Blocked