Në Python, funksionet e integruara type() dhe ininstance() përdoren për të marrë dhe kontrolluar llojin e një objekti, si p.sh. një ndryshore, dhe për të përcaktuar nëse ai është i një lloji të caktuar.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
Përmbajtja e mëposhtme shpjegohet këtu, së bashku me kodin e mostrës.
- Merrni dhe kontrolloni llojin e objektit:
type()
- Përcaktimi i llojit të objektit:
type()
,isinstance()
- Përcaktimi i llojit duke përdorur type()
- Përcaktimi i llojit duke përdorur instance()
- Dallimi midis tipit () dhe instancës ()
Në vend të përcaktimit të llojit të një objekti, mund të përdoret trajtimi i përjashtimeve ose funksioni i integruar hasattr() për të përcaktuar nëse një objekt ka metodat dhe atributet e sakta.
Merrni dhe kontrolloni llojin e objektit:lloji ()
type(object) është një funksion që kthen llojin e objektit të kaluar si argument. Kjo mund të përdoret për të gjetur llojin e një objekti.
print(type('string'))
# <class 'str'>
print(type(100))
# <class 'int'>
print(type([0, 1, 2]))
# <class 'list'>
Vlera e kthyer e type() është një objekt tip si str ose int.
print(type(type('string')))
# <class 'type'>
print(type(str))
# <class 'type'>
Përcaktimi i llojit të objektit:type(),isinstance()
Përdorni type() ose ininstance() për të përcaktuar llojin.
Përcaktimi i llojit duke përdorur type()
Duke krahasuar vlerën e kthyer të type() me një lloj arbitrar, mund të përcaktohet nëse objekti është i çfarëdo lloji.
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
Nëse dëshironi të përcaktoni nëse është një nga disa lloje, përdorni operatorin in dhe një tuple ose listë me disa lloje.
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
Është gjithashtu e mundur të përcaktohen funksionet që ndryshojnë përpunimin në varësi të llojit të argumentit.
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
Përcaktimi i llojit duke përdorur instance()
isinstance(objekt, klasë) është një funksion që kthen true nëse objekti i argumentit të parë është një shembull i llojit ose nënklasës së argumentit të dytë.
Argumenti i dytë mund të jetë një grup llojesh. Nëse është një shembull i secilit lloj, kthehet true.
print(isinstance('string', str))
# True
print(isinstance(100, str))
# False
print(isinstance(100, (int, str)))
# True
Një funksion i ngjashëm me shembullin e përcaktimit të tipit duke përdorur type() mund të shkruhet si më poshtë
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
Dallimi midis tipit () dhe instancës ()
Dallimi midis type() dhe ininstance() është se isinstance() kthen true për instancat e nënklasave që trashëgojnë klasën e specifikuar si argumenti i dytë.
Për shembull, superklasa e mëposhtme (klasa bazë) dhe nënklasa (klasa e prejardhur) janë përcaktuar
class Base:
pass
class Derive(Base):
pass
base = Base()
print(type(base))
# <class '__main__.Base'>
derive = Derive()
print(type(derive))
# <class '__main__.Derive'>
Përcaktimi i tipit duke përdorur type() kthehet true vetëm kur llojet përputhen, por isinstance() kthehet true edhe për superklasat.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
Edhe për llojet standarde, për shembull, bool e tipit boolean (e vërtetë, e gabuar), duhet pasur kujdes. bool është një nënklasë e tipit integer, kështu që isinstance() kthehet true edhe për një int nga e cila është trashëguar.
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
Nëse dëshironi të përcaktoni llojin e saktë, përdorni type(); nëse doni të përcaktoni llojin me trashëgimi të marrë parasysh, përdorni isinstance().
Funksioni i integruar issubclass() ofrohet gjithashtu për të përcaktuar nëse një klasë është një nënklasë e një klase tjetër.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False