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__