需要一种方法来检查对象是否是某个特定模块中任何类的实例。
我知道我可以通过从该模块显式导入每个类并检查元组来做到这一点:
from my_module import ClassOne, ClassTwo
>>> isinstance(my_obj, (ClassOne, ClassTwo))
True
但实际上,我导入的模块中有大量的类,并且显式地导入它们、使用它们构建一个巨大的元组并对其进行类型检查似乎不必要地冗长。我尝试了一些方法来避免这种情况:
import my_module
# Test my_obj against the module itself
>>> isinstance(my_obj, my_module)
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
# Try to test against a wildcard attribute on my_module
>>> isinstance(my_obj, my_module.*)
SyntaxError: invalid syntax
#Try to build a tuple of clases with iteration to check against
>>> for klass in my_module:
TypeError: 'module' object is not iterable
有没有一种方法可以对 my_module 中的所有类进行类型检查,而无需在元组中显式命名它们?
可选背景信息:
我可能忽略了解决我的问题的更好方法 - 如果您想知道,情况如下:
我们正在将数据从 Google App Engine 应用程序导出到我们在 Rackspace 上托管的应用程序。我们正在序列化数据pickle
然后通过 HTTP 请求将其发送到我们的 Rackspace 服务器。
Google App Engine 数据库中的一些数据属于 GAE 特定的数据类型,从 google.appengine.api.datastore_types 导入。如果任何这些数据类型通过线路到达我们的 Rackspace 服务器,它们将引发 depickling 错误,因为我们的 Rackspace 应用程序没有所需的 GAE 库。因此,在退出 GAE 时,我会检查是否有任何传出对象具有 google.appengine.api.datastore_types 的类型。如果确实如此,我要么将它们转换为内置数据类型,要么从对象中删除该字段。