Verfasst: Donnerstag 10. Mai 2007, 23:28
Eben nicht, weil diese Funktionen nichts tun - und schon gar keine Formatierung.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
def __get_uptime(self):
"""return uptime in a human readable format"""
if hasattr(self, '__uptime'):
print "old value..."
return self.__uptime
print "No uptime defined, getting new one..."
tmp = int(snmp_val(_defaultcfg.ip, _defaultcfg.snmp_community,
_defaultcfg.uptime_mib.oid + str(self.cur_id) + ".0", 1))
if not tmp:
self.__uptime = "00:00:00"
else:
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
self.__uptime = uptime_str
return self.__uptime
uptime = property(__get_uptime)
Code: Alles auswählen
In [7]: a.uptime
No uptime defined, getting new one...
No uptime defined, getting new one...
Out[7]: '10:17:36'
In [8]: a.uptime
No uptime defined, getting new one...
No uptime defined, getting new one...
Out[8]: '10:17:36'
Ich würde sagen, das ist schon die richtige Lösung. Nur must du mit args und kwargs arbeiten und die eigentliche __init__ Methode mit super() aufrufen. Dann sollte das gehen, denke ich...TheGrudge hat geschrieben:Code: Alles auswählen
def __init__(self, uptime=0): self.uptime = uptime
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
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.
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.
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
Code: Alles auswählen
#~ tmp = True
if locals().get("tmp", None):
print "OK"
Code: Alles auswählen
tmp = irgendwas()
if tmp:
mach_das_hier()
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?