我正在使用imp.find_module
然后imp.load_module
来加载'example'
,现在我想列出example.py
中Class A
函数的列表{{1}但我似乎无法找到Classes独有的getattr
属性,它会过滤掉dir(example)
中的所有其他方法。
for i in dir(example):
if hasattr(getattr(example, i), <some_attribute>):
print i
答案 0 :(得分:5)
如果您搜索现有解决方案,请使用内置inspect
模块,它有足够的功能来测试特定类型,isclass
适合您的情况:
import inspect
class Foo(object):
pass
if inspect.isclass(Foo):
print("Yep, it's class")
但是,如果你想进入深度,那么很少有其他方法。
在Python中,一切都是事物的实例。类不是排除,它们是元类的实例。在Python 2中,有两种类 - 旧式(class Foo: pass
)和新式(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")
或旧式:
import types
class Foo:
pass
if isinstance(Foo, types.ClassType):
print("Yep, it's old-style class")