type(), isinstance() pentru a obține și determina tipul în Python

Afaceri

În Python, funcțiile încorporate type() și isinstance() sunt utilizate pentru a obține și verifica tipul unui obiect, cum ar fi o variabilă, și pentru a determina dacă acesta este de un anumit tip.

Următorul conținut este explicat aici, împreună cu exemple de cod.

  • Obținerea și verificarea tipului de obiect:type()
  • Determinarea tipului de obiect:type(),isinstance()
    • Determinarea tipului utilizând type()
    • Determinarea tipului utilizând isinstance()
    • Diferența dintre type() și isinstance()

În loc să se determine tipul unui obiect, se poate utiliza gestionarea excepțiilor sau funcția încorporată hasattr() pentru a determina dacă un obiect are metodele și atributele corecte.

Obținerea și verificarea tipului de obiect: tip()

type(object) este o funcție care returnează tipul obiectului trecut ca argument. Aceasta poate fi utilizată pentru a afla tipul unui obiect.

print(type('string'))
# <class 'str'>

print(type(100))
# <class 'int'>

print(type([0, 1, 2]))
# <class 'list'>

Valoarea returnată de type() este un obiect de tip, cum ar fi str sau int.

print(type(type('string')))
# <class 'type'>

print(type(str))
# <class 'type'>

Determinarea tipului de obiect: type(), isinstance()

Utilizați type() sau isinstance() pentru a determina tipul.

Determinarea tipului utilizând type()

Comparând valoarea returnată de type() cu un tip arbitrar, se poate determina dacă obiectul este de orice tip.

print(type('string') is str)
# True

print(type('string') is int)
# False
def is_str(v):
    return type(v) is str

print(is_str('string'))
# True

print(is_str(100))
# False

print(is_str([0, 1, 2]))
# False

Dacă doriți să determinați dacă este unul dintre mai multe tipuri, utilizați operatorul in și un tupluplu sau o listă de mai multe tipuri.

def is_str_or_int(v):
    return type(v) in (str, int)

print(is_str_or_int('string'))
# True

print(is_str_or_int(100))
# True

print(is_str_or_int([0, 1, 2]))
# False

De asemenea, este posibil să se definească funcții care să modifice procesarea în funcție de tipul de argument.

def type_condition(v):
    if type(v) is str:
        print('type is str')
    elif type(v) is int:
        print('type is int')
    else:
        print('type is not str or int')

type_condition('string')
# type is str

type_condition(100)
# type is int

type_condition([0, 1, 2])
# type is not str or int

Determinarea tipului utilizând isinstance()

isinstance(object, class) este o funcție care returnează true dacă obiectul din primul argument este o instanță a tipului sau a subclasei celui de-al doilea argument.

Al doilea argument poate fi un tandem de tipuri. Dacă este o instanță a oricărui tip, se returnează true.

print(isinstance('string', str))
# True

print(isinstance(100, str))
# False

print(isinstance(100, (int, str)))
# True

O funcție similară cu exemplul de determinare a tipului folosind type() poate fi scrisă după cum urmează

def is_str(v):
    return isinstance(v, str)

print(is_str('string'))
# True

print(is_str(100))
# False

print(is_str([0, 1, 2]))
# False
def is_str_or_int(v):
    return isinstance(v, (int, str))

print(is_str_or_int('string'))
# True

print(is_str_or_int(100))
# True

print(is_str_or_int([0, 1, 2]))
# False
def type_condition(v):
    if isinstance(v, str):
        print('type is str')
    elif isinstance(v, int):
        print('type is int')
    else:
        print('type is not str or int')

type_condition('string')
# type is str

type_condition(100)
# type is int

type_condition([0, 1, 2])
# type is not str or int

Diferența dintre type() și isinstance()

Diferența dintre type() și isinstance() este că isinstance() returnează true pentru instanțele de subclase care moștenesc clasa specificată ca al doilea argument.

De exemplu, sunt definite următoarele superclasă (clasă de bază) și subclasă (clasă derivată)

class Base:
    pass

class Derive(Base):
    pass

base = Base()
print(type(base))
# <class '__main__.Base'>

derive = Derive()
print(type(derive))
# <class '__main__.Derive'>

Determinarea tipului utilizând type() returnează true numai atunci când tipurile se potrivesc, dar isinstance() returnează true chiar și pentru superclase.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Chiar și pentru tipurile standard, de exemplu, tipul boolean bool (true,false), trebuie avut grijă. bool este o subclasă a tipului integer, astfel încât isinstance() returnează true chiar și pentru un int din care este moștenit.

print(type(True))
# <class 'bool'>

print(type(True) is bool)
# True

print(type(True) is int)
# False

print(isinstance(True, bool))
# True

print(isinstance(True, int))
# True

Dacă doriți să determinați tipul exact, utilizați type(); dacă doriți să determinați tipul cu luarea în considerare a moștenirii, utilizați isinstance().

Funcția încorporată issubclass() este, de asemenea, prevăzută pentru a determina dacă o clasă este o subclasă a unei alte clase.

print(issubclass(bool, int))
# True

print(issubclass(bool, float))
# False
Copied title and URL