2011-06-21 7 views
-4

Jusqu'à présent, je n'ai fait que de la programmation procédurale en C, donc je ne suis pas très clair sur les deux OOP et Python.persistance des objets en python

J'ai un grand projet qui contient un certain nombre de fichiers python. a.py Fichier définit une classe appelée fobject J'utilise Python 2.5

Fichier b.py et c.py ont des classes appelées BProject et CProject qui ont un objet de fobject comme paramètre. J'ai inclus en utilisant l'importation CProject (défini dans c.py) dans b.py. J'ai une liste dans CProject que je remplis en utilisant wx python GUI. Ensuite j'appelle une fonction BRun définie dans BProject qui appelle en interne une fonction CRun dans CProject ie. en c.py.

Dans ce CRun je veux manipuler la liste mais la liste est toujours vide en ce moment. Pourquoi cela est-il ainsi? Que dois-je faire étant donné la contrainte est que je ne peux rien changer a.py dans lequel fobject est défini?

fichier

: 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 
fichier

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

Pouvez-vous poster le code pertinent? – user122211

+0

Cette question est tellement confuse qu'il est actuellement fondamentalement impossible de répondre. Montrer le code aiderait. – Omnifarious

+0

veuillez également poster le code approprié pour bien comprendre le problème. – sam

Répondre

3

Vous ne comprenez pas python. Vous devez comprendre variables (presque tout en python est fondamentalement un pointeur), et espaces de noms. OK, donc vous ne comprenez pas quand python crée de nouveaux objets.

Dans 90% des cas, chaque fois que vous voyez un objet, il sera nouveau.

Par exemple:

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

Voir? b est un nouvel objet, un est intact.

aussi:

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] 

Pourquoi est-ce arrivé? À l'intérieur de la fonction, il y a un tout nouvel espace de noms (qui est probablement quelque chose comme une nouvelle pile). Donc, le nouveau a à l'intérieur de la fonction n'a rien à voir avec le vieux a en dehors de la fonction.

Il est vraiment difficile de faire des données de partage python, ce qui fait qu'il est très difficile pour une section de code de jouer avec des variables dans une autre zone.

Vous pouvez modifier des choses, mais vous devez sauter à travers des cerceaux:

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] 

Voir, cela a fonctionné! J'ai changé a, parce que j'ai utilisé une méthode de a, ne pas créer une nouvelle variable.

+1

Je comprends ce que vous essayez de dire mais ce n'est pas entièrement lié à ma question –

Questions connexes