在python中过滤类的实例

时间:2015-10-23 23:50:56

标签: python class filter instance

我在python中创建了一个插件管理器。我的计划是将所有可能的插件(可能由类,函数和类实例组成)附加到单个列表中,然后使用自定义过滤器函数来获取适当的对象。

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

示例:

class A:
    pass

def func():
    pass

instance_a = A()

plugins = [func, A, instance_a]

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

2 个答案:

答案 0 :(得分:3)

如果您想要所有不是类定义而不是函数的实例,那么您可以通过以下方式实现此目的:

import types
[x for x in plugins if type(x) == types.InstanceType]

但是,我认为这真的是一个容易出错的解决方案,因为你真的只能找到任何以某种方式扩展object并且没有特殊类型的东西,就像函数一样。最好为通过类实例实现的所有插件定义一个超类,并对其进行过滤:

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

答案 1 :(得分:0)

我能想到的最容易实现的方法是,如果有人遇到类似的问题,那就是:

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]