มีคำตอบที่ดีบางอย่างที่นี่และก่อนที่ฉันจะให้ตัวเองฉันอยากจะเน้นบางอัญมณี (ไม่มีจุดประสงค์ทับทิมทับทิม) ฉันได้อ่านที่นี่
- Python ไม่ใช่ภาษา OOP บริสุทธิ์ - เป็นวัตถุประสงค์ทั่วไปภาษาหลายกระบวนทัศน์ที่อนุญาตให้โปรแกรมเมอร์ใช้กระบวนทัศน์ที่พวกเขาสบายที่สุดและ / หรือกระบวนทัศน์ที่เหมาะสมที่สุดสำหรับการแก้ปัญหาของพวกเขา
- Python มีฟังก์ชันชั้นหนึ่งดังนั้นจึง
len
เป็นวัตถุจริงๆ ในทางกลับกัน Ruby ไม่มีฟังก์ชั่นชั้นหนึ่ง ดังนั้นวัตถุฟังก์ชั่นมีวิธีการของตัวเองที่คุณสามารถตรวจสอบโดยการเรียกใช้len
dir(len)
หากคุณไม่ชอบวิธีการทำงานในรหัสของคุณเองมันเป็นเรื่องเล็กน้อยสำหรับคุณที่จะนำคอนเทนเนอร์ไปใช้ใหม่โดยใช้วิธีที่คุณต้องการ (ดูตัวอย่างด้านล่าง)
>>> class List(list):
... def len(self):
... return len(self)
...
>>> class Dict(dict):
... def len(self):
... return len(self)
...
>>> class Tuple(tuple):
... def len(self):
... return len(self)
...
>>> class Set(set):
... def len(self):
... return len(self)
...
>>> my_list = List([1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'])
>>> my_dict = Dict({'key': 'value', 'site': 'stackoverflow'})
>>> my_set = Set({1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'})
>>> my_tuple = Tuple((1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'))
>>> my_containers = Tuple((my_list, my_dict, my_set, my_tuple))
>>>
>>> for container in my_containers:
... print container.len()
...
15
2
15
15
len
นั้นเป็นอย่างไร พวกเขาคิดว่ามันเป็นเรื่องง่ายที่จะบังคับให้คนที่จะดำเนินการมากกว่าที่จะมีผลบังคับใช้คนในการดำเนินการ.__len__
.len()
ใช้ในสิ่งเดียวกันและเป็นหนึ่งในรูปลักษณ์มากทำความสะอาด หากภาษากำลังจะมี OOP__len__
สิ่งที่จะเกิดขึ้นในโลกlen(..)