2009-05-19 10 views
13

Mam funkcję, która akceptuje klasę (nie instancję) i, w zależności od tego, czy jest to określona klasa , czy podklasa tej, muszę przekazać do jednej z dwóch innych (fabrycznych) funkcji fabrycznych.Jak stwierdzić, czy klasa pochodzi od innej klasy?

(Aby zapobiec zastrzeżeń, jestem świadomy tego nie jest bardzo pythonowy, ale jestem uzależniony od tego, co biblioteka innych firm akceptuje.)

issubclass działa tylko do przypadków, nie sprzeciwia się klasa. Przypuszczam, że mógłbym utworzyć instancję klasy, zrobić issubclass i wyrzucić instancję, ale wydaje się to trochę marnotrawstwem.

Oto, co robię w tej chwili, korzystając z wbudowanego atrybutu mro, aby stwierdzić, czy dana klasa znajduje się na liście przodków mojej klasy. Czy to jest bezpieczne i czy istnieje lepszy sposób na zrobienie tego?

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

Odpowiedz

28

issubclass działa tylko do przypadków, nie sprzeciwia się klasa.

To działa dobrze dla mnie:

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

Aargh byłem myląc go z isinstance. Dzięki. –

Powiązane problemy