Python用户定义数据类型

2024-05-13 23:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个类似rogue的游戏,并定义我的Tile类。瓷砖可以是堵墙的,也可以是地板的。我想能写点东西

self.state = Blocked

类似于如何使用布尔值(但有三个值)。

有没有一种很好的方法可以让我定义一个数据类型来实现这一点?

谢谢


Tags: 方法self游戏定义数据类型state瓷砖tile
3条回答

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

Blocked, Wall, Floor = range(3)

如果它变得比那更复杂,我会看看其他的enum types in python

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

所以让我们这样说:

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

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

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

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

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

some = State.Blocked

相关问题 更多 >