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