【问题标题】:Pygame: static variables and instance variables [closed]Pygame:静态变量和实例变量
【发布时间】:2019-03-28 10:10:08
【问题描述】:

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

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

【问题讨论】:

    标签: python-3.x pygame instance-variables static-variables


    【解决方案1】:

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

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

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

    【讨论】:

    • 1.那么通过将状态设置为列出的状态之一,该对象的每个实例也会发生变化吗?例如,如果屏幕上有很多敌人,并且触发了他们的状态变化,那么每个敌人都会改变他们的状态?
    • @Protolaser28 没有。请注意有一个 instance 属性 state 和一个 class 属性 STATES。因此,更改一个Entity 实例中的state 不会更改其他Entity 实例。
    • 什么是枚举?它会返回一个列表吗?
    • 这是一种用于替代幻数/字符串的类型。例如,您可以说1 表示空闲,2 行走等,那么您的代码将非常难以阅读:state = 2(什么状态又是 2?)。查看docs 和这些答案:stackoverflow.com/questions/22586895/… stackoverflow.com/questions/37601644/…
    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2014-10-28
    • 2014-02-03
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多