2009-05-14 14 views
12

Muszę sprawdzić, czy zmienna jest modułem, czy nie. Jak to zrobić w najczystszy sposób?jak to isinstance (x, moduł)?

Potrzebuję tego do zainicjowania funkcji dyspozytora i chcę, aby ta funkcja mogła zaakceptować albo argument dyktujący, albo moduł.

+1

Czy naprawdę trzeba sprawdzić typ argumentu? Jeśli funkcja robi coś zupełnie innego w zależności od rodzaju argumentu, to na pewno trzeba to sprawdzić, ale w przeciwnym razie zazwyczaj bardziej "Pythonicznie" nie sprawdza się wyraźnie typów. –

+0

Pythonowy sposób polega na sprawdzeniu obecności metod i zmiennych. Jeśli jest zbyt wiele do sprawdzenia, preferowana jest opcja isinstance. – Unknown

+0

Pythonicznym sposobem jest "sprawdzić", używając tylko tych, których potrzebujesz, a jeśli coś, co powinno istnieć, nie, Python podnosi błąd. Nie widzę, jak może być zbyt wiele właściwości do "sprawdzenia", jeśli i tak z nich skorzystasz. –

Odpowiedz

24
>>> import os, types 
>>> isinstance(os, types.ModuleType) 
True 

(Działa również dla własnych modułów Pythona, a także wbudowanych w nich jak os.)

+0

Dzięki! Działa doskonale! –

4

lubię używać tego więc nie trzeba importować moduł typów:

isinstance(amodule, __builtins__.__class__)