【发布时间】:2019-03-28 10:10:08
【问题描述】:
我知道静态变量适用于对象,而实例变量(通常在 __init__() 函数下)适用于实例,但想到了一个问题:
静态变量和实例变量应该在何时何地在游戏中使用?此外,如果您更改对象的静态变量的值,它是否适用于该对象的所有实例?
【问题讨论】:
标签: python-3.x pygame instance-variables static-variables
我知道静态变量适用于对象,而实例变量(通常在 __init__() 函数下)适用于实例,但想到了一个问题:
静态变量和实例变量应该在何时何地在游戏中使用?此外,如果您更改对象的静态变量的值,它是否适用于该对象的所有实例?
【问题讨论】:
标签: python-3.x pygame instance-variables static-variables
如果属性对实例是唯一的(大多数情况下都是这种情况),则应使用实例属性。如果属性应该在所有实例之间共享,则可以使用类属性,例如,如果您要存储与此类相关的常量。想到的一个例子是实体的状态(有限状态机):
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()
注意可变类属性,因为当你修改它们时,你会为所有实例修改它们。
【讨论】:
state 和一个 class 属性 STATES。因此,更改一个Entity 实例中的state 不会更改其他Entity 实例。
1 表示空闲,2 行走等,那么您的代码将非常难以阅读:state = 2(什么状态又是 2?)。查看docs 和这些答案:stackoverflow.com/questions/22586895/… stackoverflow.com/questions/37601644/…