Python实例化模块中的所有类

虹吸管

我工作的一个基于文本的冒险游戏,并拥有一个具有所有的动作类,例如模块Move(Action)Look(Action)我需要一种将模块中作为类的子类的所有类实例Action化为这样的列表的方法:

actions = [Move(), Look()]

有没有一种方法,而不必通过键入类的名称来单独实例化类?

迈克·米勒

解决方案

这有效:

class Action:
    pass

class Move(Action):
    pass

class Look(Action):
    pass


actions = []
global_objs = list(globals().items())

for name, obj in global_objs:
    if obj is not Action and isinstance(obj, type) and issubclass(obj, Action):
        actions.append(obj())
print(actions)

印刷:

[<__main__.Move object at 0x101916ba8>, <__main__.Look object at 0x101916be0>]

脚步

首先,我们在当前模块中获得一个对象的所有名称:

global_objs = list(globals().items())

我们需要转换为列表,因为在Python 3中items()返回一个dictview对象,该对象反映了底层字典中的更改。由于我们在同一模块中工作,因此定义新对象将更改此字典。转换为列表可以解决此问题。

接下来,我们遍历所有对象。要满足以下条件,必须满足三个条件Action

  1. obj is not Action-由于Action是自身的子类,因此需要将其过滤掉。

  2. isinstance(obj, type)-对象必须是一个类。否则,将无法进行3.下的测试。

  3. issubclass(obj, Action) -最后,我们可以进行子类测试。

现在,我们可以创建所有过滤的类的实例,并将它们附加到列表中:

actions.append(obj())

短版

如果您确定所有类都在一个模块中定义,或者甚至希望所有子类都分布在多个模块中,则这会短得多:

>>> actions = [obj() for obj in Action.__subclasses__()]
>>> actions
[<__main__.Move at 0x10fc14fd0>, <__main__.Look at 0x10fc14668>]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实例化目录中的所有类

来自分类Dev

在Python中修补类的所有实例

来自分类Dev

在Python中修补类的所有实例

来自分类Dev

在Scala中实例化所有扩展trait的类

来自分类Dev

通过全名从模块实例化python类

来自分类Dev

Java实例化所有类

来自分类Dev

实例化从xml序列化的所有类对象

来自分类Dev

在OTTO中,参数化类的所有实例是否都是“相同”的?

来自分类Dev

在C#中,可以实例化在命名空间中找到的所有类吗?

来自分类Dev

在OTTO中,参数化类的所有实例是否都是“相同”的?

来自分类Dev

将模块内的所有函数和类导入到python类中

来自分类Dev

PHP自动加载并自动实例化所有类

来自分类Dev

强制实例化所有模板类成员函数

来自分类Dev

PHP自动加载并自动实例化所有类

来自分类Dev

如何从python类中的实例变量中获取所有值的列表

来自分类Dev

如何在Python中实例化类的实例?

来自分类Dev

从python目录中获取所有模块名称,类名称和方法名称

来自分类Dev

Python中的实例模块

来自分类Dev

使用更改所有实例的静态字段来更改类的所有实例中的字段

来自分类Dev

模拟类的所有实例

来自分类Dev

所有ViewController的类实例

来自分类Dev

从动态加载的模块实例化类

来自分类Dev

Python中没有抽象方法的抽象数据类:禁止实例化

来自分类Dev

使用PHP在目录中创建所有类的实例

来自分类Dev

如何在ruby类中获取所有实例变量?

来自分类Dev

定位所有特定类,但SHACL中的指定实例除外

来自分类Dev

在JS脚本中定位Id的所有实例以添加类

来自分类Dev

如何在通用Lisp中获取类的所有实例?

来自分类Dev

有没有一种方法可以在python中为类的所有实例运行方法?

Related 相关文章

热门标签

归档