2010-07-20 34 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 2010-07-20 14:26:52

回答

2

請參閱this上一個答案。它與派生類相反,但它可能有助於研究。

您可以將A本身傳遞給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 2010-07-20 14:30:57

+0

良好的捕獲。更新它,以便使用IDLE正確工作並重新發布。 – thegrinner 2010-07-20 14:36:51

+0

感謝您的回答。我現在正在這樣做。但我認爲必須有一些更簡單的方法來訪問父類對象。我發現了* im_self *之類的東西,但無法理解如何使用它。 – iamgopal 2010-07-20 14:44:16

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參數。

相關問題