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
len
sebenarnya adalah objek. Ruby, di sisi lain, tidak memiliki fungsi kelas satu. Jadi len
objek 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(..)