Aký je kanonický spôsob kontroly typu v jazyku Python?

Aký je najlepší spôsob kontroly, či je daný objekt daného typu? Ako skontrolovať, či objekt dedí od daného typu?

Povedzme, že mám objekt o. Ako skontrolujem, či je to str?

Riešenie

Ak chcete zistiť, či o je inštanciou str alebo nejakou podtriedou str, použite isinstance (toto je "kanonický" spôsob):

if isinstance(o, str):

Kontrola, či typ o je presne str (vylúčte podtriedy):

if type(o) is str:

Nasledujúci postup tiež funguje a v niektorých prípadoch môže byť užitočný:

if issubclass(type(o), str):

Príslušné informácie nájdete v časti Vstavané funkcie v Referencii knižnice Python.

Ešte jedna poznámka: v tomto prípade, ak'používate Python 2, môžete skutočne použiť:

if isinstance(o, basestring):

pretože to zachytí aj reťazce Unicode (unicode nie je podtrieda str; ako str, tak aj unicode sú podtriedy basestring). Všimnite si, že basestring už neexistuje v Pythone 3, kde je striktné oddelenie reťazcov (str) a binárnych dát (bytes).

Alternatívou je isinstance, ktorý akceptuje tuple tried. Vráti True, ak x je inštanciou niektorej podtriedy niektorej z (str, unicode):

if isinstance(o, (str, unicode)):
Komentáre (6)

isinstance(o, str) vráti True, ak o je str alebo je typu, ktorý dedí od str.

type(o) is str vráti True vtedy a len vtedy, ak o je str. Vráti False, ak o je typ, ktorý dedí od str.

Komentáre (3)