ทุกอย่างใน Python เป็น Object รวมถึง Classes ทุก Class เป็น Instance ของ Class ที่เรียกว่า "type" Type Object เองก็เป็น Instance ของ Class type เช่นกัน คุณสามารถตรวจสอบลำดับชั้นการสืบทอดของ Class ได้โดยตรวจสอบแอตทริบิวต์ __bases__ ของ Object Class type() จะคืนค่าประเภท Class ของ Argument (Object) ที่ส่งเข้ามาเป็นพารามิเตอร์ หากส่ง Argument เดียว type(obj) จะคืนค่าประเภทของ Object นั้น หากส่ง 3 Arguments type(name, bases, dict) จะคืนค่า Type Object ใหม่
การใช้ type()
มาดู Class ของประเภทข้อมูลที่ใช้บ่อยที่สุดกัน ในโปรแกรมด้านล่าง เราเริ่มต้นตัวแปรบางตัว แล้วใช้ type() เพื่อตรวจสอบ Class ของพวกมัน
ตัวอย่าง
# Some variables
a = 5
b = 5.2
c = 'hello'
A = [1,4,7]
B = {'k1':'Sun','K2':"Mon",'K3':'Tue'}
C = ('Sky','Blue','Vast')
print(type(a))
print(type(b))
print(type(c))
print(type(A))
print(type(B))
print(type(C))
ผลลัพธ์
การรันโค้ดข้างต้นให้ผลลัพธ์ดังนี้ −
<class 'int'> <class 'float'> <class 'str'> <class 'list'> <class 'dict'> <class 'tuple'>
ประเภทของ Classes
ถ้าเราลงลึกดูประเภทของ Classes ข้างต้น เราจะเห็นว่าทั้งหมดเป็นของ Class ที่ชื่อว่า 'type'
ตัวอย่าง
print(type(int)) print(type(dict)) print(type(list)) print(type(type))
ผลลัพธ์
การรันโค้ดข้างต้นให้ผลลัพธ์ดังนี้ −
<class 'type'> <class 'type'> <class 'type'> <class 'type'>
การสร้าง Object Type ใหม่
เราสามารถใช้แนวทางเดียวกันข้างต้นเพื่อสร้าง Object ใหม่ได้ โดยส่ง 3 พารามิเตอร์เพื่อสร้าง Type Object ใหม่
ตัวอย่าง
Object1 = type('A', (object,), dict(a='Hello', b=5))
print(type(Object1))
print(vars(Object1))
class NewCalss:
a = 'Good day!'
b = 7
Object2 = type('B', (NewCalss,), dict(a='Hello', b=5))
print(type(Object2))
print(vars(Object2))
ผลลัพธ์
การรันโค้ดข้างต้นให้ผลลัพธ์ดังนี้ −
<class 'type'> {'a': 'Hello', 'b': 5, '__module__': '__main__', '__dict__': , '__weakref__': , '__doc__': None} <class 'type'> {'a': 'Hello', 'b': 5, '__module__': '__main__', '__doc__': None}