2010-09-27 44 views
19

Cái gì mà tôi nhìn thấy những người làm tất cả các thời gian là:Trọng phương pháp một lớp cha mẹ của

class Man(object): 
    def say_hi(self): 
     print('Hello, World.') 

class ExcitingMan(Man): 
    def say_hi(self): 
     print('Wow!') 
     super(ExcitingMan, self).say_hi() # Calling the parent version once done with custom stuff. 

Cái gì mà tôi không bao giờ nhìn thấy những người làm là:

class Man(object): 
    def say_hi(self): 
     print('Hello, World.') 

class ExcitingMan(Man): 
    def say_hi(self): 
     print('Wow!') 
     return super(ExcitingMan, self).say_hi() # Returning the value of the call, so as to fulfill the parent class's contract. 

Đây có phải là vì tôi treo với tất cả các lập trình sai, hay là vì một lý do chính đáng?

+24

Giá trị trả về của 'ExcitingMan.say_hi()' thường quá thú vị đối với hầu hết các bộ vi xử lý cần xử lý. – intuited

Trả lời

8

Tôi cho rằng trả về rõ ràng giá trị trả lại của phương thức siêu lớp là thận trọng hơn (ngoại trừ trong trường hợp hiếm hoi mà trẻ muốn loại bỏ nó). Đặc biệt là khi bạn không biết chính xác những gì siêu đang làm. Đồng ý, trong Python bạn thường có thể tìm kiếm các phương pháp siêu lớp và tìm hiểu những gì nó làm, nhưng vẫn còn.

Tất nhiên những người đã viết phiên bản khác có thể đã viết chính lớp cha mẹ và/hoặc biết rằng nó không có giá trị trả lại. Trong trường hợp đó họ đã quyết định làm mà không có tuyên bố trả về rõ ràng.

3

Tôi nghi ngờ rằng, ít nhất là trong trường hợp này, bởi vì hàm cha không trả về bất cứ điều gì, không có điểm nào trong việc trả về kết quả của nó. Nói chung, mặc dù, khi chức năng phụ huynh trả lại một cái gì đó, tôi nghĩ rằng đó là một thực hành tốt.

Thực sự, có hay không bạn trả lại những gì mà lớp siêu phụ thuộc vào chính xác những gì bạn muốn mã làm. Làm điều đó nếu đó là những gì bạn muốn và những gì là thích hợp.

5

Trong ví dụ bạn đưa ra phương thức lớp cha không có câu lệnh trả về rõ ràng và vì vậy sẽ trả về Không. Vì vậy, trong trường hợp này không có vấn đề ngay lập tức. Nhưng lưu ý rằng một người nào đó nên sửa đổi cha mẹ để trả về một giá trị mà bây giờ chúng ta có thể cần phải sửa đổi mỗi đứa trẻ.

Tôi nghĩ đề xuất của bạn là chính xác.

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