property Funktion wird nicht wie gewünscht aufgerufen

22/08/2009 - 13:48 von Florian Lindner | Report spam
Hallo!
Ich stehe gerade vor einem, für mich absolut unverstàndlichen Problem.
Folgender Code:

class FluidProperties:
kappa = 1.4
R = 287
T = 273
p = 100000
c = 0

def _getMa(self):
import pdb; pdb.set_trace()
return self.c / sqrt(self.kappa * self.R * self.T)

def _setMa(self, Ma):
import pdb; pdb.set_trace()
self.c = Ma * sqrt(self.kappa * self.R * self.T)

Ma = property(_getMa, _setMa)

def _getp_t(self):
import pdb; pdb.set_trace()
return self.p * ( (self.kappa-1) / 2 * self.Ma**2 +
1)**(self.kappa / (self.kappa-1))

p_t = property(_getp_t)


Nun sei fp=FluidProperties(). Bei fp.p_t wird korrekt in den Debugger
gewechselt. Bei fp.Ma oder fp.Ma=4 jedoch nicht. Wenn ich in p_t mit dem
Debugger bin und mir das __dict__ des Objektes anzeigen lassen:

(Pdb) pi self
self. Ma = 4

Ich nehme ja mal an, dass da irgendwo ein kleiner oder großer
Verstàndnisfehler vorliegt... aber wo?

Danke,

Florian
 

Lesen sie die antworten

#1 Peter Otten
22/08/2009 - 15:40 | Warnen spam
Florian Lindner wrote:

Hallo!
Ich stehe gerade vor einem, für mich absolut unverstàndlichen Problem.
Folgender Code:

class FluidProperties:
kappa = 1.4
R = 287
T = 273
p = 100000
c = 0

def _getMa(self):
import pdb; pdb.set_trace()
return self.c / sqrt(self.kappa * self.R * self.T)

def _setMa(self, Ma):
import pdb; pdb.set_trace()
self.c = Ma * sqrt(self.kappa * self.R * self.T)

Ma = property(_getMa, _setMa)

def _getp_t(self):
import pdb; pdb.set_trace()
return self.p * ( (self.kappa-1) / 2 * self.Ma**2 +
1)**(self.kappa / (self.kappa-1))

p_t = property(_getp_t)


Nun sei fp=FluidProperties(). Bei fp.p_t wird korrekt in den Debugger
gewechselt. Bei fp.Ma oder fp.Ma=4 jedoch nicht. Wenn ich in p_t mit dem
Debugger bin und mir das __dict__ des Objektes anzeigen lassen:

(Pdb) pi self
self. Ma = 4

Ich nehme ja mal an, dass da irgendwo ein kleiner oder großer
Verstàndnisfehler vorliegt... aber wo?



Properties funktionieren nur mit new-style-Klassen korrekt.

class FluidProperties(object):
...

sollte Dein Problem beheben.

Ähnliche fragen