len()

len(obj) เป็น built-in function ใช้หาจำนวนที่อยู่ในวัตถุนั้น โดยวัตถุนั้นจะเป็น string, tuple, list หรือ range ก็ได้ หรือจะเป็นกลุ่มของข้อมูล เช่น dictionary หรือ set เป็นต้น

พูดให้เข้าใจอย่างง่ายคือ ถ้าใช้ len ฟังก์ชั่นกับ string มันจะบอกเราว่ามีตัวอักษรกี่ตัวใน string นั้น หากใช้กับ list มันจะบอกว่าใน list นี้มีสมาชิกอยู่กี่ตัว

การใช้ len ฟังก์ชั่นค่อนข้างง่าย syntax ของฟังก์ชั่นนี้คือ

len(obj)

ตัวอย่างการใช้ฟังก์ชั่นกับ string

str1 = 'Hello'
len(str1)

output:
5

str2 = ''
len(str2)

output:
0

ตัวอย่างการใช้ฟังก์ชั่นกับ tuple

tp1 = (1,2,3,4)
len(tp1)

output:
4

tp2 = ()
len(tp2)

output:
0

ตัวอย่างการใช้ฟังก์ชั่นกับ list

lst1 = [1,2,3,4]
len(lst1)

output:
4

lst2 = []
len(lst2)

output:
0

จะเห็นว่าต่อให้วัตถุนั้นเป็นวัตถุว่างๆ ก็สามารถใช้ฟังก์ชั่น len แสดงผลลัพธ์ออกมาเป็น 0 ได้

__len__()

ตัวนี้จะเป็น method พิเศษ เพราะเป็นฟังก์ชั่นของวัตถุตัวใดตัวหนึ่ง

ฟังก์ชั่นใดก็ตามที่กลายเป็นฟังก์ชั่นของวัตถุที่อยู่ใน class จะเรียกว่า method

ทีนี้เวลาเราสร้าง len method ใน class แล้วข้างนอก class เราใช้ len(obj) ดูเหมือนว่าเราใช้ฟังก์ชั่นในการคำนวณ แต่ตัวที่มันทำหน้าที่คำนวณคือ method โดยใช้ฟังก์ชั่นเข้ามาช่วยอีกที เพราะถ้าไม่มีตัว method ใน class แล้วเราใช้ len(obj) มันจะโยน TypeError มาให้ทันที

ถ้าจะให้เข้าใจต้องดูตัวอย่าง

สร้าง class และ instance

class Employees:
    empCount = 0

    def __init__(self, name, year):
      self.name = name
      self.year = year
      empCount += 1
    
    def __len__(self):
      return len(self.name)

    def displayCount(self):
      print('\nTotal number of employees: %d' % Employees.empCount)

    def displayEmployess(self):
      print('name: ', self.name, 'year: ', self.year)

ด้านบนนี้คือเราสร้าง class ก่อน การสร้าง class ใน Python ต้องเรียกใช้ method พิเศษ __init__(self) ก่อน

empCount เป็นตัวแปรที่ใช้ใน class ค่าของมันจะถูกแชร์กับ instance ใน class นี้ เวลาเรียกใช้ก็ให้ใช้ชื่อ class ตามด้วยจุด และต่อด้วยชื่อตัวแปร สามารถเรียกใช้ได้ทั้งใน class และนอก class

ใน class เราจะต้องสร้าง instance ของ class ซึ่งในตัวอย่างจะมี 2 ตัว คือ name กับ year เพื่อบอกให้รู้ว่าวัตถุหรือ object ที่เราจะสร้างต่อไปนี้ประกอบด้วยอะไรบ้าง ในตัวอย่างหมายความว่า เวลาเราจะสร้างวัตถุขึ้นมาสักอัน วัตถุนั้นต้องมีชื่อ(name) และมีปี(year)

method อันต่อมาคือ __len__(self) เรากำหนดว่าเมื่อ method นี้ถูกเรียกให้คำนวณด้วย len(obj) ฟังก์ชั่น

สอง method ที่เหลือคือการแสดงผลข้อมูลของวัตถุ อันแรกให้นับว่ามีวัตถุทั้งหมดเท่าไหร่ อันที่สองให้แสดงผล attributes ของวัตถุ (แสดงว่ามีข้อมูลที่ใส่ใน instance มีอะไรบ้าง)

สร้างวัตถุ

emp1 = Employees('Jane', 2018)

ขั้นตอนนี้คือการสร้างวัตถุหลังจากสร้าง class แล้ว วัตถุนี้ชื่อ emp1 มี 2 attributes คือ Jane กับ 2018

Access Attribute ของวัตถุ

emp1.displayEmployees()

output:
name: Jane year: 2018

เรียกใช้ method เพื่อดู attributes ของวัตถุ โดยใช้เครื่องหมายจุด (.) หลังชื่อวัตถุ ตามด้วยชื่อ method และวงเล็บเปิดและปิด

print(len(emp1))

output:
4

เรียกใช้ len(obj) ได้ผลลัพธ์เป็น 4 คือ J a n e

หากไม่ได้กำหนด len ที่เป็น method ไว้ใน class เวลาเรียกใช้แบบด้านบน มันจะแสดงข้อความด้านล่างนี้

     print(len(emp1))
 TypeError: object of type 'Employees' has no len()