【问题标题】:Is there a way to return all objects of a class as a list in Python?有没有办法将类的所有对象作为 Python 中的列表返回?
【发布时间】:2019-07-18 18:50:30
【问题描述】:

我正在创建一个有多种武器的小游戏。每个武器都是“武器”类中的一个对象变量。我想创建一个数组,其中包含每个武器对象作为其变量名。有没有一种简单的方法可以做到这一点,还是我必须自己将每个对象名称输入到列表中?澄清一下,我不想列出对象的属性,我想要返回属于给定类的对象列表的东西。

【问题讨论】:

  • 为什么需要一个变量名数组?
  • 这样我就可以遍历它并打印出每个对象的特定属性。
  • 您可以使用dir__dict__(如果您的班级不使用__slots__)、适当的locals 调用或使用元类来使用它。
  • 您应该使用weakref 模块中的结构之一。所以你不必照顾删除。只需将对象添加到它们的 __init__() 中即可。

标签: python python-3.x class object


【解决方案1】:

您需要自己构建这样的列表,通常通过覆盖__new__

class Weapon:
    weapons = []
    def __new__(cls, *args, **kwargs):
        obj = super().__new__(cls, *args, **kwargs)
        Weapon.weapons.append(obj)

请记住,这样的列表会延迟实例被垃圾收集,除非您使用弱引用来跟踪它们。此外,不会自动从列表中删除实例;要做到这一点,使用 dict 将实例的 id 映射到实例本身以便于查找可能会更简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多