Có một số câu trả lời tuyệt vời ở đây, và vì vậy trước khi tôi tự đưa ra, tôi muốn làm nổi bật một vài viên đá quý (không có ý định chơi chữ ruby) tôi đã đọc ở đây.
- Python không phải là ngôn ngữ OOP thuần túy - đó là mục đích chung, ngôn ngữ đa mô hình cho phép lập trình viên sử dụng mô hình mà họ cảm thấy thoải mái nhất và / hoặc mô hình phù hợp nhất cho giải pháp của họ.
- Python có các hàm hạng nhất, nên
len
thực sự là một đối tượng. Ruby, mặt khác, không có chức năng hạng nhất. Vì vậy, len
đối tượng hàm có các phương thức riêng mà bạn có thể kiểm tra bằng cách chạy dir(len)
.
Nếu bạn không thích cách thức này hoạt động trong mã của riêng bạn, thì việc bạn triển khai lại các thùng chứa bằng phương pháp ưa thích của bạn là điều không quan trọng (xem ví dụ bên dưới).
>>> 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
là như thế nào . Họ nghĩ rằng việc buộc mọi người thực hiện sẽ dễ.__len__
hơn là bắt mọi người thực hiện.len()
. Đó là điều tương tự, và một cái trông sạch sẽ hơn nhiều . Nếu ngôn ngữ sẽ có OOP__len__
, thì điều gì trên thế giới là điểm tạo ralen(..)