wie kann ich ein worterbuch herstellen und abrufen?

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
alinos
User
Beiträge: 6
Registriert: Freitag 21. Mai 2010, 15:35

Hallo
ich habe eine Class Project() geschriben in der zwei Functionen definieren,add_material() und namematzeigen(),die mir ein worterbuch herstellt und die paar key-value mir zurückgiben kann.Dann habe ich zwei probleme:
1. die function add_material() stellt zwar ein worterbuch,nach dem instancieren der Class Project() aber kann ich nicht zweite und drite paar hinfügen denn ich will viele andere paar in dem objectsworterbuch hinfügen zu können und dannach speichen. Damit ich in der function namematzeigen() abrufen kann.
2.Obwohl ich die global variable namemat in der function namematzeigen() definiere,genau zu sagen habe ich die variable namemat in function add_material() aufgerufen in der function namematzeigen trete ein fehler auf. dass ich nicht die variable nicht defieniere.

Hier ist der code:
Code:

Code: Alles auswählen

class Project():
    def __init__(self,name,material,simpa):
        """ name und material von project hinfügen"""
        self.Name=name
        self.Material=material
        self.Simpa=simpa

    def add_material(self,name,material):
        namemat=dict()
        self.name=name
        self.material=material
        while material > 1:
             namemat.setdefault(name,[]).append(material)
        print ("namemat:"+namemat)
        #return namemat.update(namemat)

    def namematzeigen(self):
        namemat=self.add_material.im_func.namemat
        for k,v in sorted (namemat.items()):
            return (k,v)
können sie mir helfen wie kann ich der code anders schreiben und warum trete diese fehler auf.
lg alinos
Zuletzt geändert von Anonymous am Mittwoch 9. Juni 2010, 13:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@alinos: Ad 2) Es wird nirgends ein globales `namemat` erstellt. In `add_material()` wird ein *lokaler* Name `namemat` gebunden, der ist aber nach Ablauf der Funktion nicht mehr vorhanden. Das Dictionary was daran gebunden wurde verschwindet auch, da es ansonsten nicht referenziert wird.

Lokale Namen existieren zur Laufzeit einer Funktion und auch für jeden Aufruf extra. Man kann da nicht statisch von aussen über das Funktionsobjekt drauf zugreifen wie das anscheinend in `namematzeigen()` beabsichtigt ist. Von Interna wie `im_func` sollte man in normalem Produktionscode sowieso die Finger lassen.

Was hier wohl gewünscht ist, wäre ein Dictionary, dass an das Objekt gebunden wird. Und das möglichst auch schon in der `__init__()` als leeres Dictionary was dann in den anderen Methoden angesprochen wird.

Wenn die `Project`-Klasse mehrere Abbildungen von Namen auf Materialien enthalten kann, machen die Einzelattribute `Name` und `Material` vielleicht auch keinen Sinn.
Antworten