type(), ininstance() për të marrë dhe përcaktuar llojin në Python

biznes

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.

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
Copied title and URL