2012-11-01 92 views
1

我需要從派生只能從特定TargetClass模塊得到班:獲取從特定的類派生的類模塊

import mymodule as t 
for att in dir(t): 
    someclass = getattr(t, att) 
    if isinstance(someclass, TargetClass): 
     print ("Do something with %s" % att) 

嗯...這是不行的,所以我需要創建實例,和捕獲異常,如果模塊的屬性是不可呼叫:

import mymodule as t 
for att in dir(t): 
    someclass = getattr(t, att) 
    try: 
     if isinstance(someclass(), TargetClass): 
      print ("Do something with %s" % att) 
    except: 
     pass 

所以,我怎麼只能從MyModule的那些類,也就是一些TargetClass的子類,無需創建實例和捕獲異常?

回答

4

可以使用issubclass代替isinstance, 但本質上你有同樣的問題,作爲第一參數來issubclass必須是類。所以,你可以將它們組合起來:

import mymodule as t 
for att in dir(t): 
    someclass = getattr(t, att) 
    if isinstance (someclass, type) and issubclass(someclass, TargetClass): 
     print ("Do something with %s" % att) 
+0

有反正需要捕捉異常:因爲它可以提高類似:「issubclass()ARG 1必須是一個類」 :) – RaSergiy

+0

@RaSergiy我覺得我佔了該發佈答案後不久編輯。或者我錯過了什麼?也許你打算評論其他答案:) –

+0

isinstance(someclass,type)不起作用,必須有實例:isinstance(someclass(),type)...所以對象被創建... – RaSergiy