Ada beberapa jawaban yang bagus di sini, dan sebelum saya memberikan milik saya, saya ingin menyoroti beberapa permata (tidak ada kata ruby yang dimaksudkan) yang saya baca di sini.
- Python bukan bahasa OOP murni - ini adalah tujuan umum, bahasa multi-paradigma yang memungkinkan programmer untuk menggunakan paradigma yang paling mereka sukai dan / atau paradigma yang paling cocok untuk solusi mereka.
- Python memiliki fungsi kelas satu, jadi
lensebenarnya adalah objek. Ruby, di sisi lain, tidak memiliki fungsi kelas satu. Jadi lenobjek fungsi memiliki metode sendiri yang dapat Anda periksa dengan menjalankan dir(len).
Jika Anda tidak suka cara ini bekerja dalam kode Anda sendiri, itu sepele bagi Anda untuk mengimplementasikan kembali wadah menggunakan metode yang Anda sukai (lihat contoh di bawah).
>>> 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. Mereka berpikir bahwa lebih mudah untuk memaksa orang untuk mengimplementasikan.__len__daripada memaksa orang untuk menerapkan.len(). Itu hal yang sama, dan yang terlihat jauh lebih bersih. Jika bahasanya akan memiliki OOP__len__, apa tujuan dunia inilen(..)