2010-06-16 150 views
0

我想知道是否有辦法訪問實例化對象的類(或其字段)。比方說,我有:從另一個類的另一個實例訪問類的「上」實例

def Class1: 
    def __init__(self): 
     self.title = "randomTitle" 
     self.anotherField = float() 
     self.class2Field = Class2() 

,其類型的類將是class2Field

def Class2: 
    def __init__(self): 
     self.field1 = "" 
     self.field2 = "" 
     # . . . # 

我想知道是否有從的Class2實例訪問Class 1的實例的方式即在Class1聲明(意思是,從變量self.class2Field訪問的Class1領域在Class1實例)

我知道我可以隨時更改__init__在Class2中接受Class1參數,但我想知道是否有另一種「攀爬」類層次結構的方式。

非常感謝!

回答

4

是的,但不要這樣做。明確傳遞對象。

+1

:D來吧ooooon:DI只需要訪問中的一個字段,以顯示正確的調試信息......是不是要去傷害任何人...:d:d THX的快速回復,但。 .. – BorrajaX 2010-06-16 16:26:48

1

在這裏沒有「類層次」可以說。您的Class1對象包含Class2對象,但您的Class2對象不知道。

你可以在Class2定義self.parent到是指物體在self.class2FieldClass1實例,並讓您Class1例如,通過__init__傳遞:

def Class1: 
    def __init__(self): 
     self.title = "randomTitle" 
     self.anotherField = float() 
     self.class2Field = Class2(self) 
     # . . . # 

def Class2: 
    def __init__(self, parent): 
     self.parent = parent 
     self.field1 = "" 
     self.field2 = "" 
     # . . . # 

這是醜陋的,它更多的開銷,而且要求總是包含Class2(至少是我上面寫的方式),但它可能會做你想要的。

+0

是啊...我想我可能不得不把它包裹...但它是一個可惜:( 它使事情的方式比我預期的更復雜... – BorrajaX 2010-06-16 22:32:14

0

你不必亂搞子類(Class2)的定義。創建實例後,只需將其他屬性附加到其實例即可。

def Class1: 
    def __init__(self): 
     self.title = "randomTitle" 
     self.anotherField = float() 
     self.class2Field = Class2() 
     self.class2Field.parent = self # <- This is where you attach the pointer to parent. 
     # . . . # 

def Class2: 
    def __init__(self): 
     self.field1 = "" 
     self.field2 = "" 

    def mess_with_parent(self): 
     '''Example of access to instance-level property "parent"''' 
     if hasattr(self, 'parent') and self.parent != None: 
      # instead of "!= None" insert your way of checking that .parent is right type 
      self.parent.anotherField = 5.0 
     # . . . # 

a = Class1() 
<instance of class1> = a.class2Field.parent 
b = a.class2Field 
<instance of class1> = b.parent 
+0

如果你設置'z = Class2()',那麼當你執行'z.mess_with_parent()'時會出錯,因爲屬性'parent'不存在。 – eksortso 2010-06-17 18:55:26

+0

你是對的。 ) 而不是 如果self.parent =無: 應該是這樣的: 如果在目錄(個體經營)「父」: 如果self.parent =無:#!(或者在這裏把你額外的驗證邏輯): 或: – ddotsenko 2010-06-18 18:44:45

相關問題