我有一个Python 2.x module.py
文件,如下所示:
class A(object):
KEYWORD = 'Class A'
class B(A):
KEYWORD = 'Class B'
class C(object):
pass
def list_class_keywords():
for name in globals():
print name, hasattr(name, 'KEYWORD')
if __name__ == '__main__':
list_class_keywords()
在list_class_keywords()
中,我循环遍历此文件模块的所有对象,并测试对象是否具有属性KEYWORD
。显然它不起作用,因为name
是一个字符串。我应该如何重写list_classes
以获得我正在寻找的东西?
更新:感谢Ignacio的提示。这是更新的代码:
def list_class_keywords():
global_dict = globals()
for name in global_dict:
obj = global_dict[name]
print name, hasattr(obj, 'KEYWORD')
答案 0 :(得分:3)
globals()
是一本字典。索引它。
但你应该使用装饰器来枚举类。
答案 1 :(得分:2)
class A(object):
KEYWORD = 'Class A'
class B(A):
KEYWORD = 'Class B'
class C(object):
pass
def list_class_keywords():
for name, obj in globals().items():
print name, hasattr(obj, 'KEYWORD')
if __name__ == '__main__':
list_class_keywords()
答案 2 :(得分:1)
有点hacky,但你可以eval()
一个名字的字符串,它将获得一个具有该名称的对象。如果这恰好是一个类,那么它应该可以工作。
测试:
>>>> class Object:
.... pass
....
>>>> eval("Object")
<class __main__.Object at 0x0000000102a62bc0>
>>>>
更新:另一个答案要好得多。