Instanz soll sich mit del() selbst löschen
Verfasst: Dienstag 15. Juli 2008, 16:48
Hallo alle zusammen,
ich habe in kleines Problem. Ich habe eine Klasse geschrieben, die eine IP-Adresse abbilden soll. Sie überprüft einen String beim Übergeben auf "IP-Adressen-Tauglichkeit" und speichert diesen nur, wenn die IP-Adresse korrekt ist.
Wenn ich nun beim Erzeugen einer neuen Instanz einen falschen String übergebe, z.B "ip = IpAddress('a.b.c.d')", wird zwar die Exception des falschen Strings in der Methode __init__ abgefangen, die Instanz mit del(self) jedoch nicht gelöscht. Wenn ich im Anschluss die Methode __str__ aufrufe, erhalte ich eine Fehlermeldung, da ja keine Variable __ipaddr existiert:
Da auf die Instanz nur eine Referenz zeigt, sollte Sie doch nach Aufruf von del(self) vom Garbage Collector gelöscht werden, oder?!
Hat einer eine Idee?
ich habe in kleines Problem. Ich habe eine Klasse geschrieben, die eine IP-Adresse abbilden soll. Sie überprüft einen String beim Übergeben auf "IP-Adressen-Tauglichkeit" und speichert diesen nur, wenn die IP-Adresse korrekt ist.
Wenn ich nun beim Erzeugen einer neuen Instanz einen falschen String übergebe, z.B "ip = IpAddress('a.b.c.d')", wird zwar die Exception des falschen Strings in der Methode __init__ abgefangen, die Instanz mit del(self) jedoch nicht gelöscht. Wenn ich im Anschluss die Methode __str__ aufrufe, erhalte ich eine Fehlermeldung, da ja keine Variable __ipaddr existiert:
Code: Alles auswählen
Python 2.5.1 (r251:54863, Jun 15 2008, 18:24:51)
[GCC 4.3.0 20080428 (Red Hat 4.3.0-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dhcp
>>> ip = dhcp.IpAddress('a.b.c.d')
>>> ip
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "dhcp.py", line 16, in __str__
return self.__ipaddr
AttributeError: 'IpAddress' object has no attribute '_IpAddress__ipaddr'
>>>
Hat einer eine Idee?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from re import match
class IpAddress(object):
ipregex = r"^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$"
def __init__(self,ipaddr='0.0.0.0'):
try:
self.setIp(ipaddr)
except ValueError:
del(self)
def __str__(self):
return self.__ipaddr
def setIp(self,ipaddr):
try:
assert match(self.__class__.ipregex,ipaddr)
self.__ipaddr=ipaddr
except AssertionError,args:
raise ValueError, "String is not a IP-Address!"
getIp = __repr__ = __str__