Python-д type() болон 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()
- type() ашиглан төрлийг тодорхойлох
- 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() ашиглана уу.
type() ашиглан төрлийг тодорхойлох
type()-ийн буцаах утгыг дурын төрлийнхтэй харьцуулснаар тухайн объект ямар ч төрлийнх эсэхийг тодорхойлж болно.
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
Хэрэв та энэ нь хэд хэдэн төрлүүдийн нэг мөн эсэхийг тодорхойлохыг хүсвэл in оператор болон 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(объект, анги) нь эхний аргументын объект нь хоёр дахь аргументын төрөл эсвэл дэд ангийн жишээ бол үнэнийг буцаадаг функц юм.
Хоёрдахь аргумент нь олон төрлийн төрөл байж болно. Хэрэв энэ нь аль нэг төрлийн жишээ бол үнэнийг буцаана.
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() үнэнийг буцаадагт оршино.
Жишээлбэл, дараах супер анги (үндсэн анги) болон дэд анги (үүсмэл анги) тодорхойлогддог
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() нь дээд ангиудад ч үнэнийг буцаана.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
Стандарт төрлүүдийн хувьд ч гэсэн, жишээ нь, boolean төрлийн bool (үнэн, худал) хүртэл болгоомжтой байх хэрэгтэй. 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() функцийг өгсөн.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False