2013-04-18 4 views
18

У меня есть класс, A, который унаследован группой других классов. Некоторые из них имеют несколько функций, которые схожи, и было бы неплохо, если бы эти функции определялись где-то еще и вызывались классами, которые в них нуждаются. Но эти функции вызывают функции, определенные в суперклассе.Python - Можно ли передать себя внешней функции

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) 

Так что я создал свои вспомогательные функции, которые принимают self object в качестве аргумента, и я могу назвать imp_func изнутри вспомогательных функций.

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) 

Это решает проблему.

Но должен ли я это делать? Это питоны?

+3

Нет проблем с этим. 'self' является * просто * ссылкой на экземпляр, он не является частным и не опасен передавать его другим функциям. –

+3

Зачем вам это нужно? 'B' наследует' imp_func' от 'A', поэтому вы можете вызвать' self.imp_func (* args) 'в' B.common_func' без проблем. –

+0

@FlorianBrucker Существует не только одна функция, но пара, вызываемая из родительского класса, а некоторые вызываются пару раз, в нескольких функциях в нескольких классах. Это приводит к очень раздутым классам и функциям. Эти функции также требуют много времени. Использование вспомогательных классов позволит сэкономить время, усилия и сделать код чистым и более удобным. – elssar

ответ

24

Нет проблем с этим. Экземпляры self все время передаются функциям (и методам других классов).

Смежные вопросы