【问题标题】:a dict being defined in a python class but outside any method在 python 类中定义但在任何方法之外的 dict
【发布时间】:2014-04-23 13:22:33
【问题描述】:

我正在查看这里给出的代码:Confused about classes in Learn Python the Hard Way ex43?

当我发现 dict 是在类 Map(object) 中定义但没有在任何方法中定义时。这就是我的意思:

class Map(object):

    scenes = {
        'central_corridor': CentralCorridor(),
        'laser_weapon_armory': LaserWeaponArmory(),
        'the_bridge': TheBridge(),
        'escape_pod': EscapePod(),
        'death': Death()
    }

    def __init__(self, start_scene):
        self.start_scene = start_scene

    def next_scene(self, scene_name):
        return Map.scenes.get(scene_name)

    def opening_scene(self):
        return self.next_scene(self.start_scene)

稍后在 next_scene 方法中使用 dict。我不知道除了 docstring 之外的方法之外的类中可以定义任何东西。你能解释一下这个字典是如何使用的吗?

【问题讨论】:

  • 这就像 C++ 或 Java 中的 static 成员变量。无论您创建多少个类的实例,它们都将共享同一个变量(因此无需为每个实例重新创建它)。

标签: python class dictionary


【解决方案1】:

简而言之,存在这个字典的一个实例。它被称为Map.scenes,由该类的所有实例共享。

不知道除了 docstring 之外的方法之外的类中可以定义任何东西。

实际上,您几乎可以将任何可执行语句放入class

class HHGTTG(object):
  print 42

即使def 在 Python 中也是可执行语句。

【讨论】:

  • 我可以用变量替换这个字典吗????还是在__init____方法内的类中声明这样一个全局变量是一种好习惯???
  • @kartikey_kant:这个字典一个变量。它的名字是scenes,你应该用Map.scenes而不是self.scenes来引用它。
  • 我是说我能不能把类似 anything = x + y + z 的东西放在任何方法之外,这样它就可以被称为 class.anything b>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2016-08-03
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多