2008-11-28 36 views
5

我有一個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" 

從模塊內,我怎麼可能會增加,讓我所有的類的屬性?我的模塊中的所有東西的名稱,但我似乎無法弄清楚如何從模塊中的從類的名稱到類本身。

從模塊外部,我可以簡單地使用getattr(mod, 'A'),但我沒有模塊內部的self類型的模塊。

這似乎很明顯。有人能告訴我我錯過了什麼嗎?

回答

9
import sys 
getattr(sys.modules[__name__], 'A') 
+0

啊,sys.modules中正是我一直在尋找。非常感謝。 :) – Dustin 2008-11-28 22:22:29

5

你可以將它粉碎成一個用於聲明,但是會有亂碼複製。

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] 
+0

非常感謝。我有一個特定類型的過濾器,我需要運行這些東西,但它確實是關鍵的sys.modules。 – Dustin 2008-11-28 22:23:18

2
 
classes = [x for x in globals().values() if isinstance(x, type)] 
+0

嘿,這很不錯。謝謝。 – Dustin 2008-11-28 23:36:20

相關問題