2016-05-20 14 views
5

Có thể chấp nhận/Pythonic sử dụng một phương thức trong một lớp làm máy phát không? Tất cả các ví dụ tôi đã tìm thấy hiển thị tuyên bố lợi nhuận trong một hàm, không phải trong một lớp.Phương pháp trong lớp có thể là máy phát không?

Đây là một mã làm việc Ví dụ:

class SomeClass(object): 
    def first_ten(self): 
     for i in range(10): 
      yield i 

    def test(self): 
     for i in self.first_ten(): 
      print i 

SomeClass().test() 
+0

Tôi đoán rằng hầu hết các ví dụ đều có chức năng vì nó đơn giản hơn; bạn không cần phải ở trong một lớp học, vì vậy nó không được hiển thị. – jonrsharpe

Trả lời

15

Có, đây là hoàn toàn bình thường. Ví dụ, nó thường được sử dụng để thực hiện một object.__iter__() method:

class SomeContainer(object): 
    def __iter__(self): 
     for elem in self._datastructure: 
      if elem.visible: 
       yield elem.value 

Tuy nhiên, không cảm thấy bị giới hạn bởi rằng mô hình phổ biến; bất cứ thứ gì yêu cầu lặp lại là một ứng cử viên cho một phương thức máy phát điện.

+0

+1 mẫu lặp đó là một ví dụ tốt. http://www.diveintopython3.net/ bởi Mark Pilgrim bao gồm một số điều này. –

Các vấn đề liên quan