Utilizziamo la funzione type() in Python per identificare il tipo di un specifico oggetto Python. È una funzione molto semplice e facile da capire. Senza ulteriori indugi, passiamo direttamente alla sintassi.
Sintassi della funzione Python type()
Python ha molte funzioni integrate. La funzione type()
viene utilizzata per ottenere il tipo di un oggetto.
La sintassi della funzione Python type() è:
type(object)
type(name, bases, dict)
Quando un singolo argomento viene passato alla funzione type(), essa restituisce il tipo dell’oggetto. Il suo valore è lo stesso della variabile di istanza object.__class__.
Quando vengono passati tre argomenti, restituisce un nuovo oggetto di tipo. Viene utilizzato per creare una classe dinamicamente al volo.
- “name” la stringa diventa il nome della classe. È lo stesso dell’attributo __name__ di una classe.
- “bases” la tupla specifica le classi di base. È lo stesso dell’attributo __bases__ della classe.
- “dict” il dizionario aiuta a creare il corpo della classe. È lo stesso dell’attributo __dict__ della classe.
Esempi della funzione type() in Python
Analizziamo alcuni esempi dell’utilizzo della funzione type().
1. Trovare il tipo di un oggetto Python
x = 10
print(type(x))
s = 'abc'
print(type(s))
from collections import OrderedDict
od = OrderedDict()
print(type(od))
class Data:
pass
d = Data()
print(type(d))
Output:
<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>
Notare che la funzione type() restituisce il tipo dell’oggetto con il nome del modulo. Poiché lo script Python non ha un modulo, il modulo diventa __main__.
2. Estrarre dettagli dalle classi Python
Supponiamo di avere le seguenti classi. Estrarremo metadati sulle classi utilizzando le proprietà class, bases, dict e doc.
class Data:
"""Data Class"""
d_id = 10
class SubData(Data):
"""SubData Class"""
sd_id = 20
Stampiamo alcune delle proprietà di queste classi.
print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)
print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)
Output:
<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class
<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class
Possiamo creare classi simili utilizzando la funzione type().
Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)
print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)
Output:
<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class
<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class
Si noti che non possiamo creare funzioni nella classe dinamica utilizzando la funzione type().
Utilizzo reale della funzione type()
Python è un linguaggio a tipo dinamico. Quindi, se vogliamo conoscere il tipo degli argomenti, possiamo utilizzare la funzione type(). Se desideri assicurarti che la tua funzione funzioni solo su tipi specifici di oggetti, utilizza la funzione isinstance().
Supponiamo di voler creare una funzione per calcolare qualcosa su due interi. Possiamo implementarla nel seguente modo.
def calculate(x, y, op='sum'):
if not(isinstance(x, int) and isinstance(y, int)):
print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
raise TypeError('Incompatible types of arguments, must be integers')
if op == 'difference':
return x - y
if op == 'multiply':
return x * y
# il valore predefinito è la somma
return x + y
La funzione isinstance() viene utilizzata per convalidare il tipo dell’argomento di input. La funzione type() è utilizzata per stampare il tipo dei parametri quando la convalida fallisce.
Riferimenti
Source:
https://www.digitalocean.com/community/tutorials/python-type