140
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Khi tôi có các phương thức thường xuyên để gọi một phương thức khác trong một lớp, tôi phải làm điều này
class test:
def __init__[self]:
pass
def dosomething[self]:
print "do something"
self.dosomethingelse[]
def dosomethingelse[self]:
print "do something else"
Nhưng khi tôi có phương pháp tĩnh, tôi không thể viết
self.dosomethingelse[]
Bởi vì không có trường hợp. Tôi phải làm gì trong Python để gọi một phương thức tĩnh từ một phương pháp tĩnh khác của cùng một lớp?
Hỏi ngày 7 tháng 12 năm 2009 lúc 13:23Dec 7, 2009 at 13:23
4
Làm thế nào để tôi phải làm trong Python để gọi một phương thức tĩnh từ một phương thức tĩnh khác của cùng một lớp?
class Test[] :
@staticmethod
def static_method_to_call[]
pass
@staticmethod
def another_static_method[] :
Test.static_method_to_call[]
@classmethod
def another_class_method[cls] :
cls.static_method_to_call[]
Đã trả lời ngày 5 tháng 11 năm 2010 lúc 8:08Nov 5, 2010 at 8:08
Warvariucwarvariucwarvariuc
54,8K36 Huy hiệu vàng167 Huy hiệu bạc226 Huy hiệu Đồng36 gold badges167 silver badges226 bronze badges
2
class.method
nên làm việc.
class SomeClass:
@classmethod
def some_class_method[cls]:
pass
@staticmethod
def some_static_method[]:
pass
SomeClass.some_class_method[]
SomeClass.some_static_method[]
Pierre
11.9k6 Huy hiệu vàng41 Huy hiệu bạc62 Huy hiệu Đồng6 gold badges41 silver badges62 bronze badges
Đã trả lời ngày 7 tháng 12 năm 2009 lúc 13:26Dec 7, 2009 at 13:26
JLDUPONTJLDUPONTjldupont
90.2K56 Huy hiệu vàng196 Huy hiệu bạc313 Huy hiệu đồng56 gold badges196 silver badges313 bronze badges
4
Lưu ý - Có vẻ như câu hỏi đã thay đổi một số. Câu trả lời cho câu hỏi về cách bạn gọi một phương thức thể hiện từ phương thức tĩnh là bạn không thể không chuyển một thể hiện như một đối số hoặc khởi tạo phiên bản đó bên trong phương thức tĩnh.
Điều tiếp theo là chủ yếu là để trả lời "Làm thế nào để bạn gọi một phương thức tĩnh từ một phương thức tĩnh khác":
Hãy nhớ rằng có một sự khác biệt giữa các phương pháp tĩnh và phương pháp lớp trong Python. Một phương thức tĩnh không có đối số đầu tiên ngầm, trong khi phương thức lớp lấy lớp làm đối số đầu tiên ngầm [thường là ____10 theo quy ước]. Với ý nghĩ đó, đây là cách bạn sẽ làm điều đó:
Nếu đó là phương pháp tĩnh:
test.dosomethingelse[]
Nếu đó là phương pháp lớp:
cls.dosomethingelse[]
Đã trả lời ngày 7 tháng 12 năm 2009 lúc 13:25Dec 7, 2009 at 13:25
Jason Bakerjason BakerJason Baker
186K132 Huy hiệu vàng368 Huy hiệu bạc510 Huy hiệu Đồng132 gold badges368 silver badges510 bronze badges
5
Nếu những điều này không phụ thuộc vào lớp hoặc thể hiện, thì chỉ cần biến chúng thành một hàm.
Vì điều này có vẻ như là giải pháp rõ ràng. Tất nhiên trừ khi bạn nghĩ rằng nó sẽ cần phải được ghi đè, phân lớp, v.v ... Nếu vậy, thì các câu trả lời trước đó là đặt cược tốt nhất. Ngón tay vượt qua tôi sẽ không được đánh dấu khi chỉ cung cấp một giải pháp thay thế có thể hoặc không phù hợp với nhu cầu của ai đó;].
Vì câu trả lời đúng sẽ phụ thuộc vào trường hợp sử dụng của mã được đề cập;]
Đã trả lời ngày 30 tháng 5 năm 2017 lúc 10:01May 30, 2017 at 10:01
Ok, sự khác biệt chính giữa các phương thức lớp và phương thức tĩnh là:
- Phương pháp lớp có bản sắc riêng, đó là lý do tại sao chúng phải được gọi từ trong một trường hợp.
- Mặt khác, phương pháp tĩnh có thể được chia sẻ giữa nhiều trường hợp để nó phải được gọi từ bên trong lớp
marc_s
715K172 Huy hiệu vàng1315 Huy hiệu bạc1434 Huy hiệu đồng172 gold badges1315 silver badges1434 bronze badges
Đã trả lời ngày 7 tháng 12 năm 2009 lúc 15:13Dec 7, 2009 at 15:13
Ahmad Dwaikahmad DwaikAhmad Dwaik
9651 Huy hiệu vàng9 Huy hiệu bạc13 Huy hiệu đồng1 gold badge9 silver badges13 bronze badges
1
Bạn có thể gọi các phương thức phi tĩnh từ các phương thức tĩnh, nhưng bằng cách tạo một thể hiện bên trong phương thức tĩnh.
Nó sẽ hoạt động như vậy
class test2[object]:
def __init__[self]:
pass
@staticmethod
def dosomething[]:
print "do something"
# Creating an instance to be able to
# call dosomethingelse[], or you
# may use any existing instance
a = test2[]
a.dosomethingelse[]
def dosomethingelse[self]:
print "do something else"
test2.dosomething[]
Đã trả lời ngày 7 tháng 12 năm 2009 lúc 14:48Dec 7, 2009 at 14:48
Ahmad Dwaikahmad DwaikAhmad Dwaik
9651 Huy hiệu vàng9 Huy hiệu bạc13 Huy hiệu đồng1 gold badge9 silver badges13 bronze badges
2
Bạn có thể gọi các phương thức phi tĩnh từ các phương thức tĩnh, nhưng bằng cách tạo một thể hiện bên trong phương thức tĩnh.
class WithStaticMethods:
@staticmethod
def static1[]:
print["This is first static"]
@staticmethod
def static2[]:
# WithStaticMethods.static1[]
__class__.static1[]
print["This is static too"]
WithStaticMethods.static2[]
prints:
This is first static
This is static too
Nó sẽ hoạt động như vậyOct 18 at 11:22
Đã trả lời ngày 7 tháng 12 năm 2009 lúc 14:48Emil Vatai
Bạn có thể gọi
1 thay vì self.dosomethingelse[]
2 nếu hàm được gọi của bạn nằm trong cùng một lớp với phương thức tĩnh của người gọi.1 gold badge16 silver badges15 bronze badgesself.dosomethingelse[]