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.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
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