ฟังก์ชัน type() ใน Python: วิธีตรวจสอบชนิดข้อมูลและเปรียบเทียบกับ isinstance()

1. ฟังก์ชัน type() ใน Python คืออะไร?

ภาพรวมของฟังก์ชัน type()

ในภาษา Python ฟังก์ชัน type() ถูกใช้บ่อยในการตรวจสอบชนิดข้อมูลของอ็อบเจ็กต์ ฟังก์ชันนี้จะคืนค่าชนิดของอ็อบเจ็กต์ที่ส่งเข้าไปเป็นอาร์กิวเมนต์ เหมาะสำหรับการดีบักโปรแกรมหรือเช็คชนิดข้อมูล ช่วยให้ตรวจสอบได้อย่างง่ายดายว่าอ็อบเจ็กต์นั้นเป็นชนิดข้อมูลอะไร ซึ่งเป็นจุดเด่นของภาษา Python ที่เป็นแบบไดนามิกไทป์

วิธีการใช้งานพื้นฐาน

ฟังก์ชัน type() ใช้ในรูปแบบดังนี้

type(วัตถุ)

ฟังก์ชันนี้จะคืนค่าคลาสของอ็อบเจ็กต์ เช่น การตรวจสอบชนิดข้อมูลของจำนวนเต็มหรือสตริง

print(type(123))  # ผลลัพธ์: <class 'int'>
print(type("Python"))  # ผลลัพธ์: <class 'str'>

ด้วยวิธีนี้ คุณสามารถตรวจสอบชนิดข้อมูลของอ็อบเจ็กต์ได้อย่างชัดเจน ก่อนดำเนินการที่ขึ้นอยู่กับชนิดข้อมูลนั้น

2. วิธีใช้งาน type() พื้นฐาน

การตรวจสอบชนิดข้อมูลพื้นฐาน

Python มีชนิดข้อมูลพื้นฐานหลายแบบ ซึ่งสามารถตรวจสอบได้ด้วย type() ตัวอย่างเช่น

print(type(3.14))  # ผลลัพธ์: <class 'float'>
print(type(True))  # ผลลัพธ์: <class 'bool'>

ชนิดข้อมูลพื้นฐานเหล่านี้ถูกใช้บ่อยใน Python การใช้ type() จะช่วยตรวจสอบชนิดข้อมูลของตัวแปรขณะทำงาน และป้องกันข้อผิดพลาดจากการใช้ชนิดข้อมูลผิด

การตรวจสอบชนิดข้อมูลในเงื่อนไข

ฟังก์ชัน type() สามารถใช้ร่วมกับนิพจน์เงื่อนไขเพื่อเช็คว่าอ็อบเจ็กต์เป็นชนิดที่ต้องการหรือไม่ เช่น การเช็คว่าเป็นจำนวนเต็ม

if type(123) is int:
    print("นี่คือจำนวนเต็ม")

หากต้องการตรวจสอบหลายชนิดข้อมูลพร้อมกัน สามารถใช้ in ได้เช่นกัน

if type([1, 2, 3]) in (list, int):
    print("เป็นลิสต์หรือจำนวนเต็ม")

การตรวจสอบชนิดข้อมูลในเงื่อนไข ช่วยป้องกันข้อผิดพลาดที่ไม่คาดคิดได้ดี

3. การตรวจสอบชนิดข้อมูลแบบซับซ้อน

ตรวจสอบชนิด List, Tuple และ Dictionary

ใน Python สามารถใช้ type() เพื่อตรวจสอบชนิดข้อมูลของ List, Tuple และ Dictionary ได้ ตัวอย่างดังนี้

my_list = [1, 2, 3]
print(type(my_list))  # ผลลัพธ์: <class 'list'>

my_tuple = (1, 2, 3)
print(type(my_tuple))  # ผลลัพธ์: <class 'tuple'>

my_dict = {'a': 1, 'b': 2}
print(type(my_dict))  # ผลลัพธ์: <class 'dict'>

ชนิดข้อมูลเหล่านี้เหมาะสำหรับเก็บข้อมูลหลายค่า และทำให้โปรแกรมมีความยืดหยุ่นมากขึ้น

ตรวจสอบชนิด Set และ Frozenset

type() สามารถตรวจสอบชนิดข้อมูลของเซต (set) และ frozenset ได้เช่นกัน ตัวอย่าง:

my_set = {1, 2, 3}
print(type(my_set))  # ผลลัพธ์: <class 'set'>

my_frozenset = frozenset([1, 2, 3])
print(type(my_frozenset))  # ผลลัพธ์: <class 'frozenset'>

ชนิดข้อมูลเหล่านี้ใช้สำหรับการดำเนินการเกี่ยวกับเซต เช่น การหาค่าที่ซ้ำกันหรือยูเนียน

4. การแปลงชนิดข้อมูลและการประยุกต์ใช้ type()

ภาพรวมการแปลงชนิดข้อมูล

Python มีฟังก์ชันสำหรับแปลงค่าระหว่างชนิดข้อมูลต่าง ๆ เช่น int() float() str() สามารถแปลงข้อความเป็นตัวเลขหรือจุดทศนิยมได้

my_str = "100"
my_int = int(my_str)
print(type(my_int))  # ผลลัพธ์: <class 'int'>

การแปลงชนิดข้อมูลเช่นนี้ควรใช้ type() ตรวจสอบผลลัพธ์เสมอ

ตรวจสอบหลังการแปลงชนิด

type() มีประโยชน์ในการเช็คว่าการแปลงชนิดข้อมูลสำเร็จหรือไม่ เช่น แปลงข้อความเป็น float

my_float = float("3.14")
print(type(my_float))  # ผลลัพธ์: <class 'float'>

การแปลงชนิดข้อมูลมีประโยชน์มากในการตรวจสอบอินพุตของผู้ใช้หรือไฟล์ที่นำเข้า

5. ความแตกต่างระหว่าง type() และ isinstance()

จุดเด่นของ isinstance()

นอกจาก type() ยังมี isinstance() ที่ใช้ตรวจสอบว่าอ็อบเจ็กต์เป็นชนิดที่กำหนดหรือไม่ (รวมถึงซับคลาส)

x = 5
if isinstance(x, int):
    print("x เป็นจำนวนเต็ม")

isinstance() มีประโยชน์สำหรับกรณีที่เกี่ยวข้องกับคลาสที่มีการสืบทอด

การเลือกใช้ type() และ isinstance()

type() จะตรวจสอบชนิดข้อมูลแบบเป๊ะ ๆ ไม่สนใจซับคลาส ขณะที่ isinstance() ตรวจสอบรวมถึงซับคลาสด้วย หากเป็นวัตถุที่มีโครงสร้างสืบทอด แนะนำให้ใช้ isinstance()

class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(isinstance(dog, Animal))  # True
print(type(dog) is Animal)  # False

ตัวอย่างนี้ Dog เป็นซับคลาสของ Animal ดังนั้น isinstance() จะตอบ True ขณะที่ type() จะตอบ False

6. สรุปและข้อควรระวัง

ฟังก์ชัน type() ใน Python มีประโยชน์มากสำหรับการตรวจสอบชนิดข้อมูล แต่ถ้าเป็นกรณีที่มีโครงสร้างสืบทอด (inheritance) ควรใช้ isinstance() แทน และหากต้องเขียนโค้ดที่ชนิดข้อมูลอาจเปลี่ยนแปลงแบบไดนามิก ควรมีการจัดการข้อผิดพลาดอย่างเหมาะสม

การตรวจสอบและแปลงชนิดข้อมูลมีบทบาทสำคัญในการประมวลผลข้อมูลหรือ validate อินพุตของผู้ใช้ หากใช้ฟังก์ชันเหล่านี้อย่างถูกต้อง จะช่วยให้โปรแกรมของคุณแข็งแรงและปลอดภัยมากขึ้น

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール