type(), isinstance() upang makuha at matukoy ang uri sa Python

Negosyo

Sa Python, ang mga built-in na function type() at isinstance() ay ginagamit upang makuha at suriin ang uri ng isang bagay, tulad ng isang variable, at upang matukoy kung ito ay isang partikular na uri.

Ang mga sumusunod na nilalaman ay ipinaliwanag dito, kasama ang sample code.

  • Kunin at suriin ang uri ng bagay:type()
  • Pagpapasiya ng uri ng bagay:type(),isinstance()
    • Pagpapasiya ng uri gamit ang uri()
    • Uri ng pagpapasiya gamit ang isinstance()
    • Pagkakaiba sa pagitan ng uri() at isinstance()

Sa halip na tukuyin ang uri ng isang bagay, maaaring gumamit ng exception handling o ang built-in na function na hasattr() upang matukoy kung ang isang bagay ay may mga tamang pamamaraan at katangian.

Kunin at suriin ang uri ng bagay:uri()

type(object) ay isang function na nagbabalik ng uri ng bagay na ipinasa bilang argumento. Ito ay magagamit upang malaman ang uri ng isang bagay.

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

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

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

Ang return value ng type() ay isang type object gaya ng str o int.

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

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

Pagpapasiya ng uri ng bagay:type(),isinstance()

Gumamit ng type() o isinstance() upang matukoy ang uri.

Pagpapasiya ng uri gamit ang uri()

Sa pamamagitan ng paghahambing ng return value ng type() sa isang arbitrary type, maaari itong matukoy kung ang object ay nasa anumang uri.

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

Kung gusto mong matukoy kung isa ito sa ilang uri, gamitin ang in operator at isang tuple o listahan ng ilang uri.

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

Posible ring tukuyin ang mga function na nagbabago ng pagproseso depende sa uri ng argumento.

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

Uri ng pagpapasiya gamit ang isinstance()

Ang isinstance(object, class) ay isang function na nagbabalik ng true kung ang object ng unang argumento ay isang instance ng uri o subclass ng pangalawang argumento.

Ang pangalawang argumento ay maaaring isang tuple ng mga uri. Kung ito ay isang instance ng alinmang uri, ibabalik ang true.

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

print(isinstance(100, str))
# False

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

Ang isang function na katulad ng halimbawa ng uri ng pagpapasiya gamit ang type() ay maaaring isulat bilang mga sumusunod

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

Pagkakaiba sa pagitan ng uri() at isinstance()

Ang pagkakaiba sa pagitan ng type() at isinstance() ay ang isinstance() ay nagbabalik ng true para sa mga pagkakataon ng mga subclass na nagmamana ng klase na tinukoy bilang pangalawang argumento.

Halimbawa, ang sumusunod na superclass (base class) at subclass (derived class) ay tinukoy

class Base:
    pass

class Derive(Base):
    pass

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

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

Ang pagpapasiya ng uri gamit ang type() ay nagbabalik lamang ng true kapag ang mga uri ay tumutugma, ngunit ang isinstance() ay nagbabalik ng true kahit para sa mga superclass.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Kahit na para sa mga karaniwang uri, halimbawa, ang boolean type na bool (true,false), dapat mag-ingat. Ang bool ay isang subclass ng uri ng integer, kaya ang isinstance() ay nagbabalik ng true kahit para sa isang int kung saan ito minana.

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

Kung nais mong matukoy ang eksaktong uri, gamitin ang uri(); kung gusto mong matukoy ang uri na may inheritance na isinasaalang-alang, gamitin ang isinstance().

Ang built-in na function na issubclass() ay ibinigay din upang matukoy kung ang isang klase ay isang subclass ng isa pang klase.

print(issubclass(bool, int))
# True

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