2011-06-21 31 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

我明白你想说什么,但它与我的问题没有完全相关 –