Gabay sa Pagsusuri ng Uri sa Python: type() at isinstance()

1. Panimula

Bakit mahalaga ang pag-verify ng uri sa Python? Ang Python ay isang dinamikong typed na wika, kung saan ang uri ng mga variable at object ay natutukoy sa oras ng pagpapatakbo. Dahil sa flexible na disenyo ng wika, hindi kinakailangang tahasang ideklara ang mga uri, ngunit ang flexibility na ito ay maaaring magdulot ng hindi inaasahang mga error sa uri at mga problema sa pag-andar. Kaya naman, mahalaga ang pag-verify ng uri upang mapanatili ang pagiging maaasahan at katatagan ng mga programang Python. Sa artikulong ito, ipapaliwanag ang mga pangunahing pamamaraan ng pag-verify ng uri sa Python tulad ng type(), isinstance(), at iba pang mga advanced na pamamaraan.

2. Pangkalahatang-ideya ng mga uri ng data sa Python

Python, may iba’t ibang uri ng data tulad ng mga numeric type, string type, list type, at dictionary type. Ang bawat uri ng data ay may tiyak na gamit, at sa pamamagitan ng pag-verify ng uri, maaaring maiwasan ang mga hindi inaasahang error.

Mga Pangunahing Uri ng Data

  • Numeric type (int, float) Ang numeric type ay may int para sa mga integer at float para sa mga decimal.
  num1 = 10
  num2 = 3.14
  print(type(num1))  # <class 'int'>
  print(type(num2))  # <class 'float'>
  • String type (str) Ito ay uri para mag-imbak ng text data, at tinutukoy ito sa pamamagitan ng paglalagay ng single o double quotes.
  text = "Hello, World!"
  print(type(text))  # <class 'str'>
  • List type (list) Ang list ay isang koleksyon na may pagkakasunod-sunod, maaaring maglaman ng maraming elemento. Ang list ay tinutukoy gamit ang [], at maraming operasyon ang maaaring gawin.
  mylist = [1, 2, 3, 4]
  print(type(mylist))  # <class 'list'>
  • Dictionary type (dict) Ang dictionary type ay nag-iimbak ng data bilang mga pares ng key at value, at tinutukoy gamit ang {}.
  mydict = {"one": 1, "two": 2}
  print(type(mydict))  # <class 'dict'>

3. Pagsusuri ng Uri gamit ang function na type()

type() ay isang pangunahing built-in function na ginagamit upang makuha ang uri ng tinukoy na object. Dahil simple lang itong nagbabalik ng uri, napaka-kapaki-pakinabang ito sa pagsusuri ng uri ng object.

Pangunahing paggamit ng function na type()

Sa susunod na halimbawa, ginagamit ang function na type() upang suriin ang uri ng variable.
myvar = 1234
print(type(myvar))  # <class 'int'>
Maaari ring suriin ang iba pang mga uri gamit ang parehong paraan.
mystr = "Hello"
print(type(mystr))  # <class 'str'>

Mga benepisyo at mga babala ng type()

type() ay nagbibigay ng simpleng paraan para sa pagsusuri ng uri, ngunit kailangan mag-ingat sa pagtukoy ng subclass. Ang type() ay hindi isinasaalang-alang ang subclass, tinitingnan lamang nito kung tugma ang tinukoy na uri.
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(type(dog) == Animal)  # False
Sa kasong ito, ang Dog ay nagmana mula sa Animal, ngunit ang type() ay magbabalik ng False. Kung nais mong isaalang-alang ang subclass, inirerekomenda ang isinstance() na ipinakikilala sa susunod.

4. isinstance() function para sa pag-verify ng uri

isinstance() function ay ginagamit upang suriin kung ang isang object ay isang tiyak na uri, o isa sa mga subclass nito. Posible ang flexible na pagsusuri ng uri kasama ang mga relasyon ng inheritance.

Pangunahing Paggamit ng isinstance()

Sa susunod na halimbawa, gagamitin ang isinstance() upang suriin ang uri ng variable.
myvar = 1234
print(isinstance(myvar, int))  # True
Sa halimbawang ito, dahil ang myvar ay uri int, ibabalik ang True.

Pagtukoy ng Maramihang Uri

Ang isinstance() ay maaaring magpasa ng maramihang uri sa isang tuple upang sabay-sabay na suriin ang mga ito.
value = 3.14
print(isinstance(value, (int, float)))  # True
Kapaki-pakinabang ito kapag nais suriin ang maramihang uri nang sabay.

Pagtukoy ng Subclass

Dahil sinusuportahan ng isinstance() ang mga subclass, maaari ring suriin kung ang isang object ay kabilang sa isang klase na may inheritance relationship.
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(isinstance(dog, Animal))  # True
Sa halimbawang ito, dahil ang instance ng klase Dog ay nagmana mula sa klase Animal, ibabalik ang True.

5. Iba pang mga paraan ng pag-verify ng uri

Sa Python, may mga paraan pa para i-verify ang uri bukod sa type() at isinstance(). Maaaring gamitin ang mga pamamaraang ito ayon sa partikular na pangangailangan.

issubclass() function

issubclass() ay ginagamit upang suriin kung ang isang klase ay subclass ng ibang klase.
class Animal:
    pass

class Dog(Animal):
    pass

print(issubclass(Dog, Animal))  # True

collections.abc module

collections.abc module ay kapaki-pakinabang para sa pag-verify ng uri ng mga koleksyon tulad ng listahan at diksyunaryo. Ang sumusunod ay halimbawa ng pag-suri kung ang listahan ay isang Sequence.
import collections.abc

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

typing module na may type hints

typing module ay ginagamit upang magpasok ng static type checking sa Python code. Dahil dito, tumataas ang nababasa ng code at nagiging mas madali ang pag-debug.
from typing import List

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

NoneType type verification

NoneType ay ang uri ng espesyal na object na tinatawag na None. Sa pamamagitan ng pag-verify ng uri, maiiwasan ang mga hindi inaasahang error.
myvar = None
print(type(myvar))  # <class 'NoneType'>
NoneType ay kapaki-pakinabang kapag tinitingnan kung ang return value ng isang function ay None.
年収訴求