python中类实例的过滤器

python中类实例的过滤器,python,class,filter,instance,Python,Class,Filter,Instance,我正在用python制作一个插件管理器。我的计划是将所有可能的插件(可能由类、函数和类的实例组成)附加到一个列表中,然后使用自定义筛选函数获取适当的对象 如何从列表中获取所有类实例?类实例可以是任何类 例如: class A: pass def func(): pass instance_a = A() plugins = [func, A, instance_a] 现在,假设我没有对类实例a的引用,如何从插件中仅获取实例a?甚至可能吗?如果您想要所有实例,这些实例本身不

我正在用python制作一个插件管理器。我的计划是将所有可能的插件(可能由类、函数和类的实例组成)附加到一个列表中,然后使用自定义筛选函数获取适当的对象

如何从列表中获取所有类实例?类实例可以是任何类

例如:

class A:
    pass

def func():
    pass

instance_a = A()

plugins = [func, A, instance_a]

现在,假设我没有对类实例
a
的引用,如何从
插件中仅获取
实例a
?甚至可能吗?

如果您想要所有实例,这些实例本身不是类定义,也不是函数,那么您可以通过以下方式实现:

import types
[x for x in plugins if type(x) == types.InstanceType]
<>但是,我会认为这是一个容易出错的解决方案,因为实际上你只会找到某种扩展了<代码>对象< /代码>的东西,并且没有像它那样的特殊类型。最好为通过类实例实现的所有插件定义一个超类,并在此基础上进行筛选:

[x for x in plugins if isinstance(x, Plugin)]

如果有人遇到类似问题,我能想到的最简单的方法是:

class A:
    pass

def func():
    pass

 a = A()
 plugins = [a, A, func]

 instance_plugins = [x for x in plugins if inspect.isclass(type(x)) and not type(x) == type]

感谢您花时间回复!可能不够清楚,所以我添加了一个示例。我认为这很明显,但请参阅我的更新答案,其中我将我的建议应用于您的特定案例。我希望有一种方法可以做到这一点,而不必保留类引用,但看起来没有。我没有遵循,请详细说明。示例代码只是演示了返回的内容实际上是您希望在那里找到的内容,它并不假定您在筛选列表之前对实例有任何了解。但它只对类实例的插件(也适用于超类)起作用,而不适用于函数或类对象本身。对于类对象和函数,没有类型/实例关系,因此相同类型的过滤几乎没有意义。我想过滤所有不需要类对象的类实例。有办法吗?你的问题对我来说似乎没有意义。如果您没有对该类的引用,您如何知道在列表中查找的是哪个类?我想返回所有实例,而不考虑类。任何类的所有实例?每件事都是某门课的一个例子。当问题还在澄清的时候,你把我的答案作为你自己的答案贴出来,这让我很难过。我刚刚更新了我的原始答案。对不起,我昨晚正在做这个。不过,我相信你的答案比我的更正确,并将其标记为解决方案。谢谢。我仍然建议引入类层次结构,并且在过滤方面要具体。祝你好运。