Python-da növü əldə etmək və müəyyən etmək üçün type(), isinstance().

Biznes

Python-da daxili funksiyalar type() və isinstance() dəyişən kimi obyektin tipini almaq və yoxlamaq və onun müəyyən tipdə olub-olmadığını müəyyən etmək üçün istifadə olunur.

Aşağıdakı məzmun nümunə kodu ilə birlikdə burada izah olunur.

  • Obyekt tipini əldə edin və yoxlayın:type()
  • Obyekt növünün təyini:type(),isinstance()
    • type() ilə növün təyini
    • isinstance() istifadə edərək növ təyini
    • Type() və isinstance() arasındakı fərq

Obyektin tipini müəyyən etmək əvəzinə, obyektin düzgün metod və atributlara malik olub-olmadığını müəyyən etmək üçün istisnaların idarə edilməsindən və ya daxili hasattr() funksiyasından istifadə etmək olar.

Obyekt tipini əldə edin və yoxlayın:type()

type(obyekt) arqument kimi ötürülən obyektin növünü qaytaran funksiyadır. Bu, obyektin növünü tapmaq üçün istifadə edilə bilər.

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

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

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

type() funksiyasının qaytarılması dəyəri str və ya int kimi tip obyektidir.

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

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

Obyekt növünün təyini:type(),isinstance()

Növü müəyyən etmək üçün type() və ya isinstance() istifadə edin.

type() ilə növün təyini

type()-ın qaytarılması dəyərini ixtiyari tiplə müqayisə etməklə obyektin hər hansı bir tipdə olub olmadığını müəyyən etmək olar.

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

Əgər onun bir neçə növdən biri olub-olmadığını müəyyən etmək istəyirsinizsə, in operatorundan və bir sıra və ya bir neçə növün siyahısından istifadə edin.

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

Arqument növündən asılı olaraq emalını dəyişən funksiyaları müəyyən etmək də mümkündür.

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

isinstance() istifadə edərək növ təyini

isinstance(obyekt, sinif) birinci arqumentin obyekti ikinci arqumentin növü və ya alt sinifinin nümunəsidirsə, doğru qaytaran funksiyadır.

İkinci arqument bir sıra növlər ola bilər. Əgər o, hər iki növün nümunəsidirsə, doğru qaytarılır.

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

print(isinstance(100, str))
# False

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

type() istifadə edərək tip təyini nümunəsinə bənzər funksiya aşağıdakı kimi yazıla bilər

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

Type() və isinstance() arasındakı fərq

type() və isinstance() arasındakı fərq ondan ibarətdir ki, isinstance() ikinci arqument kimi göstərilən sinfi miras alan alt sinif nümunələri üçün doğru qaytarır.

Məsələn, aşağıdakı üst sinif (əsas sinif) və alt sinif (törəmə sinif) müəyyən edilmişdir

class Base:
    pass

class Derive(Base):
    pass

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

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

type() istifadə edərək növün təyini yalnız növlər uyğun olduqda doğru qaytarır, lakin isinstance() hətta supersiniflər üçün də doğru qaytarır.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Hətta standart növlər üçün, məsələn, boolean tipli bool (doğru, yanlış), diqqətli olmaq lazımdır. bool tam ədəd tipli alt sinifdir, ona görə də isinstance() hətta miras alındığı int üçün də doğru qaytarır.

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

Dəqiq növü müəyyən etmək istəyirsinizsə, type(); Əgər miras nəzərə alınan növü müəyyən etmək istəyirsinizsə, isinstance() funksiyasından istifadə edin.

Quraşdırılmış issubclass() funksiyası da sinfin başqa sinfin alt sinfi olub-olmadığını müəyyən etmək üçün təmin edilir.

print(issubclass(bool, int))
# True

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