繁体   English   中英

过滤python中类的实例

[英]Filter for instances of classes in python

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

如何将所有类实例从列表中删除? 类实例可以是任何类。

例:

class A:
    pass

def func():
    pass

instance_a = A()

plugins = [func, A, instance_a]

现在,我怎么只instance_a出来的plugins ,假设我没有对类实例的引用A 可能吗

如果要使用所有实例,这些实例本身不是类定义,也不是函数,则可以使用以下方法实现此目的:

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

但是,我会认为这确实是一个容易出错的解决方案,因为实际上您会发现任何以某种方式扩展object并且没有像函数那样具有特殊类型的object 最好为所有通过类实例实现的插件定义一个超类,并对其进行过滤:

[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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM