2011-12-13 83 views
2

我在試圖弄清楚如何讓成員類從父類訪問數據時,我在這裏面臨停滯,因爲它們是外部模塊的一部分。Python - 訪問父母成員

基本上,這個工程(類B可以訪問就像是父母的方法,以便:A.say_hi(A)):

class A: 
    def __init__(self): 
     print("Initializing parent object...") 
     self.child = self.B() 

    class B: 
     def __init__(self): 
      print("Initializing child...") 
      A.say_hi(A) 

    def say_hi(self): 
     print("A class says hi") 

然而,這可以得到,如果上課的時間越來越超大相當混亂,所以我一直在將我的附加類放在文件中,並將它們以內聯方式導入。問題在於,如果我在嘗試在定義類B時使用'import B.py',則不能再獲取成員類來訪問其父類的成員和函數。

是否有任何方法獲得原始行爲而不會將成員類放在與父類相同的文件中?

+0

你使用的是什麼python版本?在2.7中它不起作用,因爲你正在傳遞A(類),其中實例是預期的 – soulcheck 2011-12-13 21:49:12

+0

你的縮進是否正確?它似乎不是。 「B類可以訪問父類的方法,如下所示:A.say_hi(A)」根本沒有任何意義。由於`A.say_hi(A)`是非常非常奇特的Python。你對繼承感到困惑嗎?這是你的問題嗎? – 2011-12-13 22:36:05

回答

3

其實在你的例子中,你不能在你的類B中訪問A的實例,而代碼A.say_hi(A)確實工作,但是是錯誤的。這已經在你的問題的評論中說過了。

這裏是你怎麼做,如果你希望能夠訪問父實例:

模塊b

class B(object): 
    def __init__(self, parent): 
     self.parent = parent 

    def say_hi(self): 
     print 'Child says hi to his parent %s' % (
      self.parent.__class__.__name__ 
     ) 
     self.parent.say_hi() 

模塊a

from b import B 

class A(object): 
    def __init__(self): 
     self.b = B(self) 

    def say_hi(self): 
     print 'Parent says hi!' 
0

如果您傳遞對象(a)到(b)班,您可以直接致電。

class a(): 
    def __init__(self): 
     print"Made A" 

    def test(self): 
     print ">>A Test" 

class b(): 
    def __init__(self,parent): 
     print"Made B" 
     self.parent = parent   
    def test(self): 
     print ">>B Test" 
     self.parent.test() 

a = a() 
a.test() 
b = b(a)   
b.test()