2011-06-21 10 views
-4

これまではCで手続き型プログラミングしか行っていませんでしたので、OOPとPythonの両方については不明です。Pythonでのオブジェクトの永続性

私はいくつかのpythonファイルを含む大きなプロジェクトを持っています。 ファイルa.pyはfobjectというクラスを定義しています 私はPython 2.5を使用しています

ファイルb.pyとc.pyには、fobjectというオブジェクトをパラメータとして持つクラスBProjectとCProjectがあります。 b.pyにimport CProject(c.pyで定義)を使用しました。 私はwxのpythonのGUIを使用して記入するCProjectのリストを持っています。 次にBProjectで定義された関数BRunを呼び出します。この関数は、CProject ieのCRun関数を内部的に呼び出します。 c.pyで。

このCRunではリストを操作したいが、この時点ではリストは常に空である。なぜこれはそうですか?

私は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 

ファイル

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

b.pyあなたのpythonを理解していません。 変数(ほとんどすべては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

あなたの言うことを理解していますが、質問には完全に関連していません –

関連する問題