Có sử dụng @staticmethod
hay không phụ thuộc vào những gì bạn muốn đạt được. Bỏ qua trang trí vì có nhiều thứ để nhập là một lý do khá ngớ ngẩn (không có hành vi phạm tội!) Và cho biết rằng bạn chưa hiểu khái niệm về phương pháp tĩnh tĩnh bằng Python!
Phương pháp tĩnh độc lập với lớp và bất kỳ cá thể lớp nào. Họ chỉ sử dụng phạm vi lớp như một không gian tên. Nếu bạn bỏ qua trang trí @staticmethod
, bạn đang tạo một phương thức thể hiện không thể được sử dụng mà không xây dựng một cá thể.
Dưới đây là một lớp học rất đơn giản Foo
:
>>> class Foo(object):
... @staticmethod
... def foo():
... print 'foo'
...
... def bar(self):
... print 'bar'
Bây giờ, Foo.foo()
là một phương pháp tĩnh có thể được gọi trực tiếp:
>>> Foo.foo()
foo
Foo.bar()
mặt khác là một phương pháp dụ , chỉ có thể được gọi từ các cá thể (đối tượng) của Foo
:
>>> Foo.bar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method foo() must be called with Foo instance as first argument (got nothing instead)
>>> foo = Foo()
>>> foo.bar()
bar
Để trả lời câu hỏi của bạn: Nếu bạn muốn xác định phương pháp tĩnh, hãy sử dụng @staticmethod
. Nếu không, đừng.
Nếu bạn có phương thức không sử dụng self
và do đó có thể được viết dưới dạng phương pháp tĩnh, hãy tự hỏi: Bạn có bao giờ muốn truy cập chức năng này từ bên ngoài mà không cần có một cá thể không? Hầu hết các lần, câu trả lời sẽ là: Số
Nguồn
2011-07-27 11:35:08
Thực ra, tôi vẫn còn bối rối: Có một số nơi mà chúng ta phải sử dụng staticmethod trong python3 không? Tôi tìm thấy nhiều nơi không phải là cần thiết để sử dụng staticmethod. –