Django und Klassenvariablen
Jetzt habe ich nochmal was probiert und kapiere mal wieder nicht was das sein soll.
Ich habe nun tmp einfach mal weggelassen, damit ich mal testen kann was passiert wenn der Benutzer eigentlich nicht eingewählt ist. Sollte ja funktionieren, aber es kommt:
Wieso sucht er denn nach einer globalen tmp? Ich kann doch sonst auch einfach sagen, gucke ob Variable da (if tmp) und dann sagt Python immer False falls nicht vorhanden. Liegt das daran das es als Property zugewiesen wurde?
Code: Alles auswählen
def __get_uptime(self):
"""return uptime in a human readable format"""
if not tmp:
return "00:00:00"
div, mod = divmod(tmp, 8640000)
div, mod = divmod(mod, 360000)
uptime_str = '%d:' % div
div, mod = divmod(mod, 6000)
uptime_str += '%02d:' % div
div, mod = divmod(mod, 100)
uptime_str += '%02d' % div
return uptime_str
uptime = property(__get_uptime)
Code: Alles auswählen
146 # tmp = int(snmp_val(_defaultcfg.ip, _defaultcfg.snmp_community,
147 # _defaultcfg.uptime_mib.oid + str(self.cur_id) + ".0", 1))
--> 148 if not tmp:
149 return "00:00:00"
150 div, mod = divmod(tmp, 8640000)
<type 'exceptions.NameError'>: global name 'tmp' is not defined
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hm. Da ist wohl "removing magic" noch nicht so ganz durchgedrungenTheGrudge hat geschrieben:Nein das geht leider nicht und wird auch von den Django-Entwicklern nicht empfohlen, da in der __init__ soviel Magic passiert das es dann nicht mehr geht.
Wie wäre es mit __new__?
Kannst du nicht. Es kommt ein NameError.TheGrudge hat geschrieben:Ich kann doch sonst auch einfach sagen, gucke ob Variable da (if tmp) und dann sagt Python immer False falls nicht vorhanden.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
IMHO ging das noch nie
Mach mal ein mini Skript und starte es:
Wenn tmp vorher nicht initialisiert wurde erhälst du:
Nachsehen ob tmp im lokalen Namensraum ist...
Also so:
Mach mal ein mini Skript und starte es:
Code: Alles auswählen
if tmp: pass
Man könnte das vielleicht so machen:NameError: name 'tmp' is not defined
Code: Alles auswählen
if "tmp" in locals(): pass
Also so:
Code: Alles auswählen
#~ tmp = True
if locals().get("tmp", None):
print "OK"
Jaja ich bin irgendwie nicht ganz dabei im Moment...
Natürlich ging es noch nie, ich habe es ja immer so getestet:
Dadurch wird ja tmp zugewiesen, im "schlimmsten Fall" mit None und dadurch existiert sie. Oh man...
Natürlich ging es noch nie, ich habe es ja immer so getestet:
Code: Alles auswählen
tmp = irgendwas()
if tmp:
mach_das_hier()
Vielleicht solltest Du einfach in das *Model* nicht zuviel Logik reinstecken wollen. Ich würde solche Objekte die an einem ORM hängen eher als Datenobjekte betrachten und die Arbeit in einen Controller verlegen. Insbesondere wenn man bei den Model-Objekten so leicht in Konflikt mit der "Magie" des Frameworks in Konflikt gerät.
http://de.wikipedia.org/wiki/MVC
http://de.wikipedia.org/wiki/MVC
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Doch. Aber nicht mit mangled Names:TheGrudge hat geschrieben:Nochmal eine Frage, wenn ich den Code mit hasattr ausstatte, dann funktioniert das nicht. Kann es sein das man hasattr nicht mit self benutzen kann?
__foo wird zu _ClassName__foo. Und das muss man mit getattr/hasattr manuell schreiben.
TUFKAB – the user formerly known as blackbird