AttributeError: can't set attribute Fehlermeldung

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
botchico
User
Beiträge: 2
Registriert: Montag 30. April 2007, 08:58

Donnerstag 19. Februar 2009, 21:39

Hallo,

bin Neuling in Sachen Python und Klassen.

Habe folgendes ausprobiert

Code: Alles auswählen

from numpy import arctan2, diff, unique
import cosine
import wx
import os
import mx

class test(object):
    def __init__(self ):
        self.sin = [9,11]
        self.cos = [10,2]
        self.pos = [2,3]
        self.method = 0
        self.phase = COSINEPhase(self.sin, self.cos, self.pos, self.method)

class COSINEPhase(object):
    def __init__(self, sine, cosine, pos, method):
        print"Konstruktor der Klasse COSINEPhase"
        self.sine = sine
        self.cosine = cosine
        self.Position = pos
        self.__PhaseValue = []
        self.EndOfMeasurement = max(pos)
        self.GenerateArcTan( method)
        #self.PartionPhase()
        #self.CalcIdealAndCorrValues()

    def GenerateArcTan(self, method = 0):
        print "Methode zum Erzeugen der Phasenwerte"
        if(method == 0):
            print "Library methode wird verwendet"
            self.PhaseValue = arctan2(self.sine, self.cosine)
        elif(method == 1):
            print "Methode noch nicht implementiert"
        elif(method == 2):
            print "Methode noch nicht implementiert"
        else:
            print "Library methode wird verwendet"
            self.PhaseValue = arctan2(self.sine, self.cosine)
        self.StartInZeroOffset = self.PhaseValue[0]
    
    def getPhaseValue(self):
        return self.PhaseValue
    
    PhaseValue      = property(getPhaseValue)
    


x = test()
und nun bekomme ich folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\Daten\Eclipse\CosineAlgoAnalyzer\src\test.py", line 48, in <module>
    x = test()
  File "D:\Daten\Eclipse\CosineAlgoAnalyzer\src\test.py", line 13, in __init__
    self.phase = COSINEPhase(self.sin, self.cos, self.pos, self.method)
  File "D:\Daten\Eclipse\CosineAlgoAnalyzer\src\test.py", line 23, in __init__
    self.GenerateArcTan( method)
  File "D:\Daten\Eclipse\CosineAlgoAnalyzer\src\test.py", line 31, in GenerateArcTan
    self.PhaseValue = arctan2(self.sine, self.cosine)
AttributeError: can't set attribute
Kann mir jemand helfen? Stehe total auf dem Schlauch
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 19. Februar 2009, 22:01

Naja, du gibst der Property nur einen getter, keinen setter.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
bords0
User
Beiträge: 172
Registriert: Mittwoch 4. Juli 2007, 20:40

Donnerstag 19. Februar 2009, 22:13

Ungetestet (geänderte Zeilen mit # markiert):

Code: Alles auswählen

from numpy import arctan2, diff, unique
import cosine
import wx
import os
import mx

class test(object):
    def __init__(self ):
        self.sin = [9,11]
        self.cos = [10,2]
        self.pos = [2,3]
        self.method = 0
        self.phase = COSINEPhase(self.sin, self.cos, self.pos, self.method)

class COSINEPhase(object):
    def __init__(self, sine, cosine, pos, method):
        print"Konstruktor der Klasse COSINEPhase"
        self.sine = sine
        self.cosine = cosine
        self.Position = pos
        self._PhaseValue = [] #
        self.EndOfMeasurement = max(pos)
        self.GenerateArcTan( method)
        #self.PartionPhase()
        #self.CalcIdealAndCorrValues()

    def GenerateArcTan(self, method = 0):
        print "Methode zum Erzeugen der Phasenwerte"
        if(method == 0):
            print "Library methode wird verwendet"
            self._PhaseValue = arctan2(self.sine, self.cosine) #
        elif(method == 1):
            print "Methode noch nicht implementiert"
        elif(method == 2):
            print "Methode noch nicht implementiert"
        else:
            print "Library methode wird verwendet"
            self._PhaseValue = arctan2(self.sine, self.cosine) #
        self.StartInZeroOffset = self.PhaseValue[0]
   
    def getPhaseValue(self):
        return self._PhaseValue #
   
    PhaseValue      = property(getPhaseValue)
   


x = test()
Vermutlich willst du nur einen Unterstrich vor PhaseValue. Und schau mal PEP8 an.
botchico
User
Beiträge: 2
Registriert: Montag 30. April 2007, 08:58

Donnerstag 19. Februar 2009, 22:35

danke euch...
das problem ist gelöst...
hab das mit den propertys noch nicht so ganz geblickt...aber es liegt an den settern..
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 20. Februar 2009, 00:08

In den gegebenen Beispielen braucht man eigentlich auch keine Properties.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten