2009-05-19 6 views
13

Ich habe eine Funktion, die eine Klasse akzeptiert (keine Instanz) und, je nachdem, ob es eine bestimmte Klasse oder eine Unterklasse von dieser ist, muss ich übergeben es in einer von zwei anderen (dritten) Fabrikfunktionen ein.Wie man erkennt, ob eine Klasse von einer anderen Klasse abstammt

(Um Einwände vorwegzunehmen, ich bin mir bewusst, das nicht sehr Pythonic ist, aber ich bin davon abhängig, was die Drittanbieter-Bibliothek übernimmt.)

issubclass nur für Instanzen arbeitet, nicht Klasse Objekte selbst. Ich nehme an, ich könnte die Klasse instanziieren, issubclass tun und die Instanz wegwerfen, aber das scheint ein wenig verschwenderisch.

Hier ist, was ich im Moment mache, basierend auf dem eingebauten mro Attribut zu sagen, ob eine bestimmte Klasse in der Liste der Vorfahren meiner Klasse ist. Ist das sicher und gibt es einen besseren Weg?

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

Antwort

28

issubclass funktioniert nur für Instanzen, nicht Klasse Objekte selbst.

Es funktioniert gut für mich:

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

Aargh, ich war verwirrend es mit isinstance. Vielen Dank. –

Verwandte Themen