Qual è il modo migliore per controllare se un dato oggetto è di un dato tipo? Che ne dite di controllare se l'oggetto eredita da un dato tipo?
Diciamo che ho un oggetto o
. Come faccio a controllare se è un str
?
Per controllare se o
è un'istanza di str
o una qualsiasi sottoclasse di str
, usate isinstance (questo sarebbe il modo "canonico"):
if isinstance(o, str):
Per controllare se il tipo di o
è esattamente str
(escludere le sottoclassi):
if type(o) is str:
Anche la seguente funziona, e può essere utile in alcuni casi:
if issubclass(type(o), str):
Vedere Built-in Functions nella Python Library Reference per informazioni rilevanti.
Un'altra nota: in questo caso, se state usando python 2, potreste effettivamente voler usare:
if isinstance(o, basestring):
perché questo catturerà anche le stringhe Unicode (unicode
non è una sottoclasse di str
; sia str
che unicode
sono sottoclassi di basestring
). Si noti che basestring
non esiste più in python 3, dove c'è una rigida separazione di stringhe (str
) e dati binari (bytes
).
In alternativa, isinstance
accetta una tupla di classi. Questo restituirà True se x è un'istanza di qualsiasi sottoclasse di qualsiasi (str, unicode):
if isinstance(o, (str, unicode)):
isinstance(o, str)
restituirà True
se o
è un str
o è di un tipo che eredita da str
.
type(o) is str
restituirà True
se e solo se o
è uno str. Restituirà False
se o
è di un tipo che eredita da str
.
isinstance(o, str)