Seite 1 von 1

Probleme mit Objektübergaben - "Pointer auf Pointer&quo

Verfasst: Donnerstag 14. Juli 2005, 09:44
von snopii
Irgendwie kommt bei der Übergabe von Objekten nur Müll bei mir heraus - den ich nicht verstehe. Poste mal die interessanten Codestellen:

Code: Alles auswählen

class DomListViewItem (QListViewItem):
    """ eigene Erweiterung der Klasse QListViewItem..."""

    def __init__ (self, itemParent, strName=''):
        """ Ein neues Item wird angelegt, wenn ein Kinditem mit Namen "strName" noch nicht 
            existiert, sonst wird das existerende Item zurückgegeben """"

        # existiert bereits ein Kinditem mit Namen "strName"?
        item = HasChildItemWithName (itemParent, strName)
        if  item != None:
            print "Das item existiert bereits:", item.strName, item.strDomPath
            return item
        
        itemDomElem = QListViewItem.__init__ (self, itemParent, strName)
        #  ... meine speziellen Variablen werden gesetzt ...      
        return self


class xxx:
   def xyz (self):
      itemDefType = DomListViewItem (formSDLVTK.itemDataModel,
                                                                                              strName=strNameDefType)
      print "itemDefType:", type(itemDefType), itemDefType.strName, itemDefType.strDomPath
      # ... weiterer Code ...

...classe xxx wird aufgerufen und versucht mit "DomListViewItem 'nen neues Item anzulegen bzw. ein existierendes zu bekommen. Neu anlegen funzt, 'nen existierendes wirft Fehler!

Ausgabe und Fehlermeldung:
Das item existiert bereits: itemName itemPath_Tralala
itemDefType: <class 'DomListViewItem'>
Traceback (most recent call last):
File ".../xxx.py", line 249, in xyz (strPath)
print "itemDefType:", type(itemDefType), itemDefType.strName, itemDefType.strDomPath
AttributeError: strDomPath


...das Objekt wird in der ersten aufgerufenen Klasse also richtig erkannt und mit existierenden Attributen zurückgegeben (1.Ausgabe), dann per "return" an die ursprünglich aufrufende Stelle zurückgegeben - dort das Objekt zwar erkannt, aber die Attribute scheinen zerstört!

Ich bin kurz vorm Verzweifeln. Freu mich auf eure Hilfe, thx

...gelöst, aber nicht wirklich verstanden!

Verfasst: Donnerstag 14. Juli 2005, 15:04
von snopii
Hab das Problem durch eine weitere Funktion geloest, die die existierenden Items vorher prueft und ggf. zurueck gibt - bzw. sonst 'nen neues item erstellen laesst.

Aber warum darf ich in einer Init-Funktion keine fremden Objekte zurueckgeben ...wie arbeitet Python da?

Re: ...gelöst, aber nicht wirklich verstanden!

Verfasst: Donnerstag 14. Juli 2005, 16:55
von Leonidas
snopii hat geschrieben:Aber warum darf ich in einer Init-Funktion keine fremden Objekte zurueckgeben ...wie arbeitet Python da?
Weil es keinen Sinn macht? Python wertet die Rückgabewerte von __init__ nicht aus.

Re: ...gelöst, aber nicht wirklich verstanden!

Verfasst: Donnerstag 14. Juli 2005, 22:12
von BlackJack
snopii hat geschrieben:Aber warum darf ich in einer Init-Funktion keine fremden Objekte zurueckgeben ...wie arbeitet Python da?
`__init__()` ist kein Konstruktor sondern eine Initialisierungsmethode. Wenn `__ini__()` aufgerufen wird, dann existiert das Objekt bereits!

Schau Die mal die Doku zu `__new__()` an, das ist vielleicht eher was Du suchst.