我正在使用imp.find_module然后imp.load_module加载'example',现在我想要列出只是函数example.py的函数,Class A但是我似乎无法找到getattrClasses特有的属性,它会过滤掉所有其他方法dir(example).
for i in dir(example):
if hasattr(getattr(example, i), <some_attribute>):
print i
Run Code Online (Sandbox Code Playgroud)
如果您搜索现有的解决方案,请使用内置inspect模块,它有很多功能可以测试特定类型,isclass对于您的情况:
import inspect
class Foo(object):
pass
if inspect.isclass(Foo):
print("Yep, it's class")
Run Code Online (Sandbox Code Playgroud)
但是,如果你想进入深度,那么很少有其他方法.
在Python中,一切都是某事的实例.类不是排除,它们是元类的实例.在Python 2中有两种类 - old-style(class Foo: pass)和new-style(class Foo(object): pass).旧式类是实例classobj,可见为types.ClassType,而新式类是实例type,它本身同时是函数和元类(可调用的元类是严格的).在Python 3中,只有新类型,总是派生自object(而后者又是实例type).
因此,您可以Foo通过发出是否是生成类的元类的实例来检查是否为类:
class Foo(object):
pass
if isinstance(Foo, type):
print("Yep, it's new-style class")
Run Code Online (Sandbox Code Playgroud)
或者对于旧式:
import types
class Foo:
pass
if isinstance(Foo, types.ClassType):
print("Yep, it's old-style class")
Run Code Online (Sandbox Code Playgroud)您还可以查看数据模型和特定于类的魔术字段列表.