Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Pygame:静态变量和实例变量_Python 3.x_Pygame_Instance Variables_Static Variables - Fatal编程技术网

Python 3.x Pygame:静态变量和实例变量

Python 3.x Pygame:静态变量和实例变量,python-3.x,pygame,instance-variables,static-variables,Python 3.x,Pygame,Instance Variables,Static Variables,我知道静态变量适用于对象,而实例变量(通常在_init__;()函数下)适用于实例,但我想到了一个问题: 在游戏中何时何地应该使用静态变量和实例变量?此外,如果更改对象静态变量的值,它是否适用于该对象的所有实例?如果属性对于实例是唯一的(大多数情况下都是这样),则应使用实例属性。如果属性应在所有实例之间共享,则可以使用类属性,例如,如果要存储与该类相关的常量。我想到的一个例子是实体的状态(有限状态机): 请注意可变类属性,因为当您修改它们时,您会修改所有实例的属性。1。所以,通过将状态设置为列出

我知道静态变量适用于对象,而实例变量(通常在_init__;()函数下)适用于实例,但我想到了一个问题:


在游戏中何时何地应该使用静态变量和实例变量?此外,如果更改对象静态变量的值,它是否适用于该对象的所有实例?

如果属性对于实例是唯一的(大多数情况下都是这样),则应使用实例属性。如果属性应在所有实例之间共享,则可以使用类属性,例如,如果要存储与该类相关的常量。我想到的一个例子是实体的状态(有限状态机):


请注意可变类属性,因为当您修改它们时,您会修改所有实例的属性。

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()