2010-07-20 2 views
0

мой код следующий в python.python, как найти объект класса из дочернего объекта?

class A(object): 
    b = B() 
    def d(self): 
     print "Hi" 

class B(): 
    def C(self): 
     self.__self__.d()#edit ::: i need to call d() method here. i know __self__ is wrong 
     # do knowledge for B being variable inside object A needed ? i.e 
     # passing parent object via init is needed as shown in some answer ? 
     # i search and found im_self __self__ etc... 

temp = A() 
temp.b.C()#should print hi ? 

Как это сделать? то есть получить доступ к методу объекта родительского класса внутри дочернего метода?

В основном я хочу отправить некоторый сигнал родительскому классу из одного родственного объекта, чтобы вызвать какой-либо метод из другого родственного объекта (не показано в приведенном выше коде). Надеюсь, я не слишком запутался.

+3

Возможно, вы не захотите это слышать, но код, вероятно, слишком тесно связан и, скорее всего, будет реорганизован. В любом случае, скорее всего, вы должны немного разъяснить. Трудно видеть ваши намерения без какого-либо контекста для этих методов. – Wilduck

ответ

2

См. this предыдущий ответ. Вместо этого он имеет производный класс, но может быть полезно изучить его.

Вы можете иметь сам проход для B в методе init или как отдельный метод. Пока это было вызвано до того, как вы получили вызов B.c(), он будет работать нормально. Это не идеальное решение, но оно работает.

class B(): 
    def __init__(self, someA): 
     self.parent = someA 
    def C(self): 
     self.parent.d() 

class A(object): 
    def __init__(self): 
     self.b = B(self) 
    def d(self): 
     print "Hi" 
+0

даст два экземпляра 'NameError: name 'self' не определен' – Philipp

+0

Хороший улов. Обновил его, чтобы он работал правильно с использованием IDLE и отправил его обратно. – thegrinner

+0

спасибо за ответ. Я делаю это сейчас. но я думаю, что должен быть какой-то более простой способ доступа к объекту родительского класса. я нашел что-то вроде * im_self *, но не мог понять, как его использовать. – iamgopal

1

Вы должны передать экземпляр и сохранить его в переменной-члена:

class B(object): 
    def __init__(self, a): 
     self.a = a 
    def c(self): 
     self.a.d() 

class A(object): 
    def __init__(self): 
     self.b = B(self) 
    def d(self): 
     print "Hi" 

Обратите внимание, что ваш код будет давать много ошибок из-за отсутствующий self параметров.

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