2009-05-19 5 views
13

クラス(インスタンスではありません)を受け入れ、特定のクラスであるかどうかに応じて、またはそのサブクラスであるを渡す必要があります。これは2つの他の(第三者の)工場機能のうちの1つにあります。クラスが別のクラスの子孫であるかどうかを調べる方法

issubclassはインスタンスのみのために働く(異議を未然に防ぐために、私は、これは非常にPython的ではありませんが、私は、サードパーティのライブラリが受け入れるものに依存してい承知している。)、ではないクラスはオブジェクト自体。私はクラスをインスタンス化することができると思う、issubclassを実行し、インスタンスをスローするが、それは少し無駄に思われる。

mro属性を使用して、特定のクラスが自分のクラスの祖先のリストに含まれているかどうかを確認することができます。これは安全ですか?これを行うにはよりよい方法がありますか?

if GenericClass in myclass.__mro__: 
    result = generic_factory(myclass) 
else: 
    result = other_factory(myclass) 

答えて

28

issubclassは、インスタンスのみのためではなく、クラスオブジェクト自体を作品。

それは私のために正常に動作します:

>>> class test(object):pass 
... 
>>> issubclass(test,object) 
True 
+0

Aargh、私はでisinstanceでそれを混乱されました。ありがとう。 –

関連する問題