2013-04-18 25 views
18

Tôi có một lớp, A, được thừa hưởng bởi một loạt các lớp khác. Một số trong số này có một vài chức năng tương tự nhau và sẽ tốt hơn nếu có các hàm được định nghĩa ở một nơi khác và được gọi bởi các lớp cần chúng. Nhưng những hàm này gọi hàm được định nghĩa trong lớp siêu.Python - Có được phép tự chuyển sang chức năng bên ngoài

class A(): 
    def imp_func(*args): 
     # called by the child class functions 

Class B(A): 
    def common_func(self): 
     # some stuff 
     self.imp_func(*args) 

Vì vậy, tôi đã tạo ra chức năng helper của tôi mà lấy self object như một cuộc tranh cãi và tôi có thể gọi imp_func từ bên trong chức năng helper.

def helper_func(obj, some_args): 
    # some common stuff 
    obj.imp_func(*args) 

class B(A): 
    def common_func(self): 
     # unique stuff 
     helper_func(self, some_args) 

Điều này giải quyết được sự cố.

Nhưng tôi có nên làm điều này không? Đây có phải là Pythonic không?

+3

Hoàn toàn không có vấn đề gì với điều đó. 'self' là * chỉ * một tham chiếu đến cá thể, nó không phải là tư nhân hay cũng không nguy hiểm khi truyền nó tới các hàm khác. –

+3

Tại sao bạn cần thực hiện việc này? 'B' thừa hưởng' imp_func' từ 'A', vì vậy bạn có thể gọi' self.imp_func (* args) 'trong' B.common_func' mà không có vấn đề gì. –

+0

@ FlorianBrucker Không chỉ có một hàm, mà một cặp được gọi từ lớp cha và một số được gọi là một vài lần, trong nhiều hàm trong nhiều lớp. Điều này dẫn đến các lớp và chức năng rất cồng kềnh. Nó cũng tốn thời gian để viết những hàm đó. Sử dụng các lớp trợ giúp sẽ tiết kiệm thời gian, công sức và làm cho mã sạch sẽ và dễ bảo trì hơn. – elssar

Trả lời

24

Không có vấn đề gì với điều đó. Các trường hợp của self được chuyển đến các hàm (và các phương thức của các lớp khác) mọi lúc.

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