Python 3.x Pygame:静态变量和实例变量
我知道静态变量适用于对象,而实例变量(通常在_init__;()函数下)适用于实例,但我想到了一个问题:Python 3.x Pygame:静态变量和实例变量,python-3.x,pygame,instance-variables,static-variables,Python 3.x,Pygame,Instance Variables,Static Variables,我知道静态变量适用于对象,而实例变量(通常在_init__;()函数下)适用于实例,但我想到了一个问题: 在游戏中何时何地应该使用静态变量和实例变量?此外,如果更改对象静态变量的值,它是否适用于该对象的所有实例?如果属性对于实例是唯一的(大多数情况下都是这样),则应使用实例属性。如果属性应在所有实例之间共享,则可以使用类属性,例如,如果要存储与该类相关的常量。我想到的一个例子是实体的状态(有限状态机): 请注意可变类属性,因为当您修改它们时,您会修改所有实例的属性。1。所以,通过将状态设置为列出
在游戏中何时何地应该使用静态变量和实例变量?此外,如果更改对象静态变量的值,它是否适用于该对象的所有实例?如果属性对于实例是唯一的(大多数情况下都是这样),则应使用实例属性。如果属性应在所有实例之间共享,则可以使用类属性,例如,如果要存储与该类相关的常量。我想到的一个例子是实体的状态(有限状态机):
请注意可变类属性,因为当您修改它们时,您会修改所有实例的属性。1。所以,通过将状态设置为列出的状态之一,该对象的每个实例也会发生变化?例如,如果你在屏幕上有许多敌人,并且你触发了他们状态的改变,那么每个敌人都会改变他们的状态?@Protolaser28否。请注意如何有一个实例属性
状态
和一个类属性状态
。因此,更改一个实体
实例的状态
不会更改其他实体
实例。什么是枚举?它是否返回一个列表?它是一种用于替换幻数/字符串的类型。例如,你可以说1
意味着空转,2
行走等等,那么你的代码就很难读了:state=2
(又是什么状态的2?)。请查看以下内容和答案:
from enum import Enum
class Entity:
# The instances don't need their own `states` enumeration,
# so I create one which will be shared among all instances.
STATES = Enum('State', 'IDLING WALKING JUMPING')
def __init__(self):
self.state = self.STATES.JUMPING
def update(self):
if self.state is self.STATES.JUMPING:
print('jumping')
entity = Entity()
entity.update()