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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
snopii
User
Beiträge: 2
Registriert: Donnerstag 14. Juli 2005, 09:19

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
snopii
User
Beiträge: 2
Registriert: Donnerstag 14. Juli 2005, 09:19

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
Antworten