នៅក្នុង Python ប្រភេទមុខងារដែលភ្ជាប់មកជាមួយ() និង isinstance() ត្រូវបានប្រើដើម្បីទទួល និងពិនិត្យមើលប្រភេទនៃវត្ថុ ដូចជាអថេរ និងដើម្បីកំណត់ថាតើវាជាប្រភេទជាក់លាក់មួយឬអត់។
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
ខ្លឹមសារខាងក្រោមត្រូវបានពន្យល់នៅទីនេះ រួមជាមួយនឹងកូដគំរូ។
- ទទួលបាននិងពិនិត្យប្រភេទវត្ថុ:
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