Tôi có một lớp Python đầy đủ các phương pháp tĩnh. Những ưu điểm và nhược điểm của việc đóng gói những thứ này trong một lớp học hơn là các chức năng thô?Có lợi thế nào khi sử dụng một lớp Python không?
Trả lời
Không có. Đây là những gì mô-đun được cho: nhóm chức năng liên quan. Sử dụng một lớp đầy đủ các phương thức tĩnh làm cho tôi rạn nứt từ Javaitis. Thời gian duy nhất tôi sẽ sử dụng một hàm tĩnh là nếu hàm là một phần không thể tách rời của lớp. (Trong thực tế, tôi có thể muốn sử dụng một phương pháp lớp anyway.)
Tôi đồng ý với Benjamin. Thay vì có một loạt các phương pháp tĩnh, bạn có lẽ nên có một loạt các chức năng. Và nếu bạn muốn tổ chức chúng, bạn nên suy nghĩ về việc sử dụng các mô-đun hơn là các lớp học. Tuy nhiên, nếu bạn muốn cấu trúc lại mã của bạn thành OO, đó là một vấn đề khác.
Không chỉ là không có lợi thế, nhưng nó làm cho mọi việc chậm hơn so với sử dụng một mô-đun đầy đủ các phương pháp. Có rất ít nhu cầu cho các phương pháp tĩnh trong python hơn là cho chúng trong java hoặc C#, chúng được sử dụng trong các trường hợp rất đặc biệt.
No. Sẽ tốt hơn nếu đặt chúng hoạt động và nếu chúng có liên quan, hãy đặt chúng vào mô-đun riêng của chúng. Ví dụ, nếu bạn có một lớp học như thế này:
class Something(object):
@staticmethod
def foo(x):
return x + 5
@staticmethod
def bar(x, y):
return y + 5 * x
Sau đó, nó sẽ được tốt hơn để có một mô-đun như,
# something.py
def foo(x):
return x + 5
def bar(x, y):
return y + 5 * x
Bằng cách đó, bạn sử dụng chúng theo cách sau:
import something
print something.foo(10)
print something.bar(12, 14)
Đừng sợ không gian tên. ;-)
Các lớp chỉ hữu ích khi bạn có một bộ chức năng hơn tương tác với một tập hợp dữ liệu (các thuộc tính mẫu) cần được duy trì giữa các cuộc gọi hàm và tham chiếu theo một cách rời rạc.
Nếu lớp học của bạn không có gì khác hơn là phương pháp tĩnh, sau đó lớp học của bạn chỉ là cú pháp cú pháp, và các hàm thẳng rõ ràng hơn và tất cả những gì bạn cần.
Nếu chức năng của bạn phụ thuộc vào mỗi tiểu bang khác hoặc toàn cầu, xem xét cũng là cách tiếp cận thứ ba:
class Something(object):
def foo(self, x):
return x + 5
def bar(self, x, y):
return y + 5 * self.foo(x)
something = Something()
Sử dụng giải pháp này, bạn có thể kiểm tra một chức năng trong sự cô lập, bởi vì bạn có thể thay đổi hành vi của chức năng khác hoặc tiêm phụ thuộc bằng cách sử dụng hàm tạo.
Phụ thuộc vào bản chất của các chức năng. Nếu họ không mạnh mẽ không liên quan (số lượng tối thiểu của các cuộc gọi giữa họ) và họ không có bất kỳ nhà nước thì có tôi muốn nói đổ chúng vào một mô-đun. Tuy nhiên, bạn có thể tự bắn mình vào chân nếu bạn cần thay đổi hành vi khi bạn đang ném thừa kế ra ngoài cửa sổ. Vì vậy, câu trả lời của tôi là có thể là và chắc chắn rằng bạn xem xét kịch bản cụ thể của mình thay vì luôn giả định một mô-đun là cách tốt nhất để thu thập một tập hợp các phương thức.
- 1. Có lợi thế nào khi tách các lớp iPhone và iPad trên ứng dụng Universal không?
- 2. Có lợi thế nào khi sử dụng bộ chọn rất cụ thể trong CSS không?
- 3. Khi nào sử dụng các biến cá thể có lợi thế hơn việc sử dụng let()?
- 4. Có lợi ích thực sự khi sử dụng J # không?
- 5. Có lợi thế nào khi sử dụng các khóa @array thay vì 0 .. $ # array không?
- 6. Có lợi thế nào khi sử dụng --no-metadata trong bản sao git svn không?
- 7. Có lợi thế nào khi sử dụng toán tử Mapper và Implicit không?
- 8. Có lợi thế nào khi sử dụng các tham số const với một loại thứ tự không?
- 9. lợi thế, bất lợi và khó khăn khi viết một ngôn ngữ để sử dụng .NET
- 10. Có lợi ích gì khi sử dụng @staticmethod không?
- 11. Có lý do nào để sử dụng các lớp trong Python nếu chỉ có một lớp trong chương trình không?
- 12. Lợi ích/lợi thế của việc sử dụng Python 3 là gì?
- 13. Có lợi ích gì khi sử dụng HtmlHelper trong MVC?
- 14. Có lợi thế nào khi sử dụng các khối trên các hàm trong Objective-C?
- 15. những lợi thế khi sử dụng scrapyd là gì?
- 16. Có lợi thế nào khi sử dụng AND và OR trên && và || trong PHP?
- 17. Những lợi thế khi sử dụng Qt là gì?
- 18. Người mới sử dụng Python có vấn đề khi sử dụng các lớp học
- 19. Có lợi ích thực sự nào khi sử dụng phương thức javascript Array reduce() không?
- 20. Có lợi ích gì khi sử dụng AS3 cuối cùng không?
- 21. Bất lợi khi tạo lớp cho Serializable
- 22. Không sử dụng lớp học làm lớp cha trong Python
- 23. Lợi ích của việc sử dụng một lớp học nào đó thay vì một lớp học trừu tượng?
- 24. Lợi thế để xác định một số hàm trong lớp trong chương trình python
- 25. Khi nào tôi nên sử dụng các phương pháp tĩnh trong một lớp học và các lợi ích là gì?
- 26. Tại sao sử dụng ** kwargs trong python? Một số lợi thế của thế giới thực khi sử dụng các đối số được đặt tên là gì?
- 27. Có lợi ích gì khi sử dụng rõ ràng tuyên bố "EventHandler" mới không?
- 28. Trong Python, khi nào tôi nên sử dụng một lớp meta?
- 29. Python: thiếu thuộc tính lớp __module__ khi sử dụng type()?
- 30. Một số lợi thế/bất lợi của việc sử dụng SQLDataReader là gì?
Tôi đồng ý với sự đồng thuận ở đây, vì vậy tôi đã tự hỏi: tại sao Python hỗ trợ các phương pháp tĩnh ở tất cả? –
@Darius chủ yếu cho OO nhất quán –