Pythoni tüübi kontroll: kuidas kasutada type(), isinstance() ja muid meetodeid

1. Sissejuhatus

Miks on Pythonis tüübi kontrollimine oluline? Python on dünaamiliselt tüübitud keel, kus muutujate ja objektide tüüp määratakse käituse ajal. Tänu paindlikule keelekujundusele ei ole vaja tüüpi selgesõnaliselt deklareerida, kuid see paindlikkus võib põhjustada ootamatuid tüübi vigu ja töökatkestusi. Seetõttu on tüübi kontrollimine oluline Pythonis programmide töökindluse ja stabiilsuse säilitamiseks. Käesolevas artiklis käsitleme peamisi meetodeid tüübi kontrollimiseks Pythonis: type(), isinstance() ja teisi täiustatud meetodeid.

2. Andmetüüpide ülevaade Pythonis

Pythonis on erinevaid andmetüüpe, nagu arvutüübid, stringid, loendid ja sõnastikud. Igal andmetüübil on oma kasutusala ning tüübi kontroll aitab vältida ootamatuid vigu.

Peamised andmetüübid

  • Arvutüübid (int, float) Arvutüüpidesse kuuluvad int täisarvude jaoks ja float ujukoma arvude jaoks.
  num1 = 10
  num2 = 3.14
  print(type(num1))  # <class 'int'>
  print(type(num2))  # <class 'float'>
  • Stringitüüp (str) Tekstiandmete hoidmiseks kasutatakse str tüüpi, mis määratakse üksikute või topelt jutumärkidega.
  text = "Hello, World!"
  print(type(text))  # <class 'str'>
  • Loend (list) Loend on järjestatud kogum, mis võib sisaldada mitmeid elemente. Loendid määratakse [] abil ja võimaldavad erinevaid operatsioone.
  mylist = [1, 2, 3, 4]
  print(type(mylist))  # <class 'list'>
  • Sõnastik (dict) Sõnastik salvestab andmeid võtme-väärtuse paaridena ja määratakse {} abil.
  mydict = {"one": 1, "two": 2}
  print(type(mydict))  # <class 'dict'>
 

3. Tüübi kontroll type() funktsiooniga

type() on sisseehitatud funktsioon, mis tagastab objekti tüübi. See on lihtne ja kasulik meetod objektide tüübi kontrollimiseks.

type() funktsiooni põhiline kasutus

Järgmises näites kontrollitakse muutuja tüüpi type() funktsiooni abil.
myvar = 1234
print(type(myvar))  # <class 'int'>
Sama meetodit saab kasutada ka teiste tüüpide puhul.
mystr = "Hello"
print(type(mystr))  # <class 'str'>

type() eelised ja piirangud

type() on lihtne, kuid alamaklasside puhul tuleb olla ettevaatlik. type() kontrollib ainult täpset tüüpi, mitte pärimissuhet.
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(type(dog) == Animal)  # False
Selles näites on Dog Animali alamaklass, kuid type() tagastab False. Sellistel juhtudel on parem kasutada isinstance().

4. Tüübi kontroll isinstance() funktsiooniga

isinstance() kontrollib, kas objekt kuulub kindlasse tüüpi või selle alamaklassi. See võimaldab paindlikumat tüübi kontrollimist.

isinstance() põhiline kasutus

Järgmises näites kontrollitakse muutuja tüüpi isinstance() abil.
myvar = 1234
print(isinstance(myvar, int))  # True
Siin tagastatakse True, sest myvar on int tüüp.

Mitme tüübi kontroll

isinstance() võimaldab kontrollida mitut tüüpi korraga, andes need tuple’i kujul.
value = 3.14
print(isinstance(value, (int, float)))  # True
See on kasulik, kui on vaja kontrollida mitut tüüpi korraga.

Alamaklasside kontroll

isinstance() arvestab ka pärimissuhet ning saab kontrollida, kas objekt kuulub alamaklassi kaudu teise klassi.
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(isinstance(dog, Animal))  # True
Selles näites tagastab kontroll True, sest Dog pärib Animal klassist.

5. Muud tüübi kontrollimise meetodid

Lisaks type() ja isinstance() funktsioonidele on Pythonis ka teisi meetodeid tüübi kontrollimiseks, mida saab kasutada vastavalt vajadusele.

issubclass() funktsioon

issubclass() kontrollib, kas üks klass on teise klassi alamaklass.
class Animal:
    pass

class Dog(Animal):
    pass

print(issubclass(Dog, Animal))  # True

collections.abc moodul

collections.abc moodul on kasulik kogumite (nagu loendid või sõnastikud) tüübi kontrollimisel. Näiteks saab kontrollida, kas loend on Sequence.
import collections.abc

mylist = [1, 2, 3]
print(isinstance(mylist, collections.abc.Sequence))  # True

typing moodul ja tüübi vihjed

typing moodul võimaldab lisada koodi staatilise tüübi kontrolli. See suurendab loetavust ja lihtsustab silumist.
from typing import List

def greet(names: List[str]) -> None:
    for name in names:
        print(f"Hello, {name}!")

NoneType kontroll

NoneType on None objekti tüüp. Selle kontrollimine aitab vältida ootamatuid vigu.
myvar = None
print(type(myvar))  # <class 'NoneType'>
NoneType kontroll on kasulik näiteks juhul, kui funktsiooni tagastusväärtus võib olla None.