2011-06-21 73 views
-4

到目前爲止,我只用C語言完成了過程編程,所以我對OOP和Python都不太清楚。python中對象的持久性

我有一個大項目,其中包含一些python文件。 文件a.py定義名爲fobject 我使用蟒2.5

文件b.py類和c.py具有類稱爲BProject和的CProject具有fobject作爲參數的對象。 我已經包含在b.py中使用導入CProject(在c.py中定義)。 我在CProject中使用wx python GUI填充了一個列表。 接下來我調用一個在BProject中定義的函數BRun,它在內部調用CProject中的CRun函數即。在c.py中。

在這個CRun中,我想操作列表,但列表總是空的。這是爲什麼?

我應該怎麼做給定的約束是我不能改變任何a.py中定義的fobject?

文件:c.py

def Instance(fObject): 
    return test_page_CProject(fObject) 


class CProject(object): 

    def __init__(self, fObject): 
     self.fObj = fObject 
     self.IntList = [] 
     ##snip 


    def OnIntSelectBtnPress(self,parent): 
     print ":self.IntList" 
     print self.IntList 
     self.listBoxIntSelect.InsertItems(self.IntList,0) 
     print self.IntList 


    def OnIntRun(self): 

       IntLModeList = self.IntListIntMode 
       #snip 

文件b.py

def Instance(fObject): 
    return BProject(fObject) 

class BProject(object): 

    def __init__(self, fObject): 

     self.FObj = fObject 
     #snip 
     Object = __import__('CProject') 
     #snip 

     self.intObject = Object.Instance(self.FObj) 
     self.intObject.OnIntRun() 
+5

你能發表相關的代碼嗎? – user122211

+0

這個問題很混亂,目前基本上不可能回答。顯示代碼將有所幫助。 – Omnifarious

+0

請好好發佈相關代碼以瞭解問題。 – sam

回答

3

你不明白蟒蛇。你需要了解變量(幾乎所有的python基本上都是一個指針),並且命名空間爲

好吧,所以你不明白什麼時候python創建新的對象。

在90%的情況下,每次看到一個對象時,都會是一個新對象。

例如:

a = [1,2,3] 
b = a + [4,5] 
print a 
>>> [1,2,3] 

看到了嗎? b是一個新的對象,a是未觸及的。

另外:

def func(a): 
    a = [1,2,3]+a 
    return a 

a = [4,5] 
print func(a) 
>>> [1,2,3,4,5] 
print a 
>>> [4,5] 

爲什麼會出現這種情況?在函數內部,有一個全新的名稱空間(這可能類似於新的堆棧)。所以新功能a裏面的功能跟老a以外的功能無關。

製作python共享數據非常困難,這使得其中一段代碼難以與另一個區域中的變量混淆。

可以改變的東西,但你必須跳火圈:

def func(a): 
    a.append([4,5]) 
    return a 

a = [1,2,3] 
print func(a) 
>>> [1,2,3,4,5] 
print a 
>>> [1,2,3,4,5] 

見,它的工作!我修改了a,因爲我使用了一個方法,而不是創建一個新的變量。

+1

我明白你想說什麼,但它與我的問題沒有完全相關 –