type(), isinstance() ដើម្បីទទួលបាន និងកំណត់ប្រភេទនៅក្នុង Python

អាជីវកម្ម

នៅក្នុង Python ប្រភេទមុខងារដែលភ្ជាប់មកជាមួយ() និង isinstance() ត្រូវបានប្រើដើម្បីទទួល និងពិនិត្យមើលប្រភេទនៃវត្ថុ ដូចជាអថេរ និងដើម្បីកំណត់ថាតើវាជាប្រភេទជាក់លាក់មួយឬអត់។

ខ្លឹមសារខាងក្រោមត្រូវបានពន្យល់នៅទីនេះ រួមជាមួយនឹងកូដគំរូ។

  • ទទួលបាននិងពិនិត្យប្រភេទវត្ថុ:type()
  • ការកំណត់ប្រភេទវត្ថុ:type(),isinstance()
    • ការកំណត់ប្រភេទដោយប្រើប្រភេទ()
    • ការកំណត់ប្រភេទដោយប្រើ isinstance()
    • ភាពខុសគ្នារវាង type() និង isinstance()

ជំនួសឱ្យការកំណត់ប្រភេទនៃវត្ថុ មួយអាចប្រើការដោះស្រាយករណីលើកលែង ឬមុខងារដែលមានស្រាប់ hasattr() ដើម្បីកំណត់ថាតើវត្ថុមានវិធីសាស្រ្ត និងគុណលក្ខណៈត្រឹមត្រូវ។

ទទួលបាននិងពិនិត្យប្រភេទវត្ថុ:ប្រភេទ()

type(object) គឺជាអនុគមន៍ដែលត្រឡប់ប្រភេទនៃវត្ថុដែលបានឆ្លងកាត់ជាអាគុយម៉ង់។ វាអាចត្រូវបានប្រើដើម្បីស្វែងរកប្រភេទនៃវត្ថុមួយ។

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

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

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

តម្លៃត្រឡប់នៃ type() គឺជាវត្ថុប្រភេទដូចជា str ឬ int ។

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

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

ការកំណត់ប្រភេទវត្ថុ:type(),isinstance()

ប្រើ type() ឬ isinstance() ដើម្បីកំណត់ប្រភេទ។

ការកំណត់ប្រភេទដោយប្រើប្រភេទ()

ដោយការប្រៀបធៀបតម្លៃត្រឡប់នៃប្រភេទ() ជាមួយនឹងប្រភេទបំពាន វាអាចត្រូវបានកំណត់ប្រសិនបើវត្ថុនោះជាប្រភេទណាមួយ។

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

ប្រសិនបើ​អ្នក​ចង់​កំណត់​ថាតើ​វា​ជា​ប្រភេទ​មួយ​ក្នុង​ចំណោម​ប្រភេទ​ច្រើន​ឬ​អត់ សូម​ប្រើ​ក្នុង​ប្រតិបត្តិករ និង tuple ឬ​បញ្ជី​នៃ​ប្រភេទ​ជា​ច្រើន។

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

វាក៏អាចធ្វើទៅបានដើម្បីកំណត់មុខងារដែលផ្លាស់ប្តូរដំណើរការអាស្រ័យលើប្រភេទអាគុយម៉ង់។

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()

isinstance(object, class) គឺជាអនុគមន៍ដែលត្រឡប់ true ប្រសិនបើ object នៃ argument ទីមួយ គឺជា instance នៃ type ឬ subclass នៃ argument ទីពីរ។

អាគុយម៉ង់ទីពីរអាចជា tuple នៃប្រភេទ។ ប្រសិនបើវាជាឧទាហរណ៍នៃប្រភេទណាមួយនោះ true ត្រូវបានបញ្ជូនត្រឡប់មកវិញ។

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

print(isinstance(100, str))
# False

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

មុខងារស្រដៀងនឹងឧទាហរណ៍នៃការកំណត់ប្រភេទដោយប្រើ type() អាចត្រូវបានសរសេរដូចខាងក្រោម

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() និង isinstance()

ភាពខុសគ្នារវាង type() និង isinstance() គឺថា isinstance() ត្រឡប់ true សម្រាប់ instances នៃ subclasss ដែលទទួលមរតក class ដែលបានបញ្ជាក់ជា argument ទីពីរ។

ឧទាហរណ៍ superclass ខាងក្រោម (ថ្នាក់មូលដ្ឋាន) និង subclass (derived class) ត្រូវបានកំណត់

class Base:
    pass

class Derive(Base):
    pass

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

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

ការកំណត់ប្រភេទដោយប្រើ type() ត្រឡប់ពិតតែនៅពេលដែលប្រភេទត្រូវគ្នា ប៉ុន្តែ isinstance() ត្រឡប់ពិតសូម្បីតែសម្រាប់ superclasses ក៏ដោយ។

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

សូម្បីតែសម្រាប់ប្រភេទស្តង់ដារក៏ដោយ ជាឧទាហរណ៍ ប៊ូលប្រភេទប៊ូលីន (ពិត មិនពិត) ត្រូវតែយកចិត្តទុកដាក់។ bool គឺជាថ្នាក់រងនៃប្រភេទចំនួនគត់ ដូច្នេះ isinstance() ត្រឡប់ពិត សូម្បីតែសម្រាប់ int ដែលវាត្រូវបានទទួលមរតកក៏ដោយ។

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

ប្រសិនបើអ្នកចង់កំណត់ប្រភេទពិតប្រាកដ សូមប្រើ type(); ប្រសិន​បើ​អ្នក​ចង់​កំណត់​ប្រភេទ​ជាមួយ​នឹង​មរតក​ដែល​ត្រូវ​បាន​យក​មក​ក្នុង​គណនី សូម​ប្រើ isinstance() ។

មុខងារដែលភ្ជាប់មកជាមួយ issubclass() ក៏ត្រូវបានផ្តល់ជូនផងដែរ ដើម្បីកំណត់ថាតើ class មួយគឺជា subclass នៃ class មួយផ្សេងទៀត។

print(issubclass(bool, int))
# True

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