如何动态获取当前Python模块中的类集?
我有一个Python模块,这个模块里定义了好几个类:
class A(object):
def __call__(self):
print "ran a"
class B(object):
def __call__(self):
print "ran b"
class C(object):
def __call__(self):
print "ran c"
在这个模块内部,我该怎么添加一个属性,让我能获取到所有的类呢?
使用dir()可以让我看到模块里所有的东西的名字,但我就是搞不清楚怎么从类的名字找到这个类本身,尤其是在模块内部的时候。
在模块外部,我可以直接用getattr(mod, 'A')
来获取类,但在模块内部,我没有类似self
的东西来使用。
这看起来很简单。有人能告诉我我漏掉了什么吗?
3 个回答
3
classes = [x for x in globals().values() if isinstance(x, type)]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
6
你可以把这个合并成一个for循环,但那样代码会变得很乱,重复的部分会很多。
import sys
import types
this_module = sys.modules[__name__]
[x for x in
[getattr(this_module, x) for x in dir(this_module)]
if type(x) == types.ClassType]
10
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期工作。这时候,我们就需要去查找解决方案,看看有没有其他人遇到过类似的问题,并找到他们的解决办法。
在这个过程中,StackOverflow是一个非常有用的资源。它是一个问答网站,专门为程序员提供帮助。你可以在上面提问,也可以搜索别人提过的问题和答案。很多时候,你会发现别人已经遇到过你现在面临的问题,并且他们分享了自己的解决方法。
总之,遇到问题时,不要慌张,先去查找一下相关的信息,看看有没有人已经解决了类似的情况,这样可以节省很多时间和精力。
import sys
getattr(sys.modules[__name__], 'A')