2014-12-03 3 views
0

У меня есть следующий код, где возникает проблема, потому что дочерние объекты требуют параметров, прежде чем они смогут создать экземпляр. Нужно ли мне создавать какую-то функцию для обработки создания дочерних объектов?Создание структуры класса parent.child, где у ребенка есть

Я хочу быть в состоянии сделать:

a = parent() 
a.other('param').double(2) 
2 
a.other('param').other_class('another_param').square(4) 
16 

Это мой код:

class parent(object): 

    def __init__(self): 
     self.other = other_class2(self) 
     self.answer = None 

    def multiply(self,x,y): 
     self.answer = x*y 
     return x*y 

    def add(self,x,y): 
     self.answer = x+y 
     return x+y 


class other_class(object): 

    def __init__(self,parent,inputed_param): 
     self.parent = parent 
     self.input = inputed_param 

    def square(self,x): 
     self.answer = self.parent.parent.multiply(x,x) 
     return self.parent.parent.multiply(x,x) 


class other_class2(object): 

    def __init__(self,parent,inputed_param): 
     self.parent = parent 
     self.other_class = other_class(self) 
     self.input = inputed_param 

    def double(self,x): 
     self.answer = self.parent.add(x,x) 
     return self.parent.add(x,x) 

В моем фактическом коде я создаю питона обертку для автоматизации задач в веб-сайт, который создает профили, в каждом из профиль - это номер выдержки. Я думал, что такая древовидная структура будет лучшим способом управления всеми связанными подпрограммами.

Мне нужен родительский класс для поддержания связи с сайтом, и я хотел бы, чтобы parent.profile(profile_id) содержал задачи/процедуры, связанные с каждым профилем. Затем мне хотелось бы parent.profile(profile_id).extract(extract_id) содержать задачи/подпрограммы, связанные с каждым из выпиской.

ответ

1

Вы можете построить класс, когда задаете param. Этот код должен реализовать ваше желаемое поведение.

class parent(object): 

    def __init__(self): 
     self.other = lambda param: other_class2(self,param) 
     self.answer = None 

class other_class2(object): 

    def __init__(self,parent,inputed_param): 
     self.parent = parent 
     self.other_class = lambda param: other_class(self,param) 
     self.input = inputed_param