nach langer Zeit (in der ich aus beruflichen Gründen keine Zeit hatte mit Python zu "spielen"), hätte ich nun mal wieder gerne ein Problem
Ich möchte eine Klasse als Datencontainer benutzen in der aber von ausserhalb nur Variablen (Werte) gelesen und gesetzt werden dürfen, die in der __init__ Prozedur definiert wurden.
Standardmäßig funktioniert ja auch in Python folgendes:
Code: Alles auswählen
class Test:
def __init__(self):
self.name = ''
if __name__ == '__main__':
test = Test()
test.dumm = 'Hallo'
print test.dumm
Nach einigem Suchem habe ich nun folgende Lösung gefunden die scheinbar funktioniert:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8
class Container:
def __init__(self):
self.__dict__['first'] = True
self.name = ''
self.first = False
def __setattr__(self, name, value):
if self.first:
self.__dict__[name] = value
else:
if name in self.__dict__:
self.__dict__[name] = value
else:
raise AttributeError
def __getattr__(self, name):
if name in self.__dict__:
return self.__dict__[name]
else:
raise AttributeError
if __name__ == '__main__':
cont = Container()
print cont.name
cont.name = 'hallo'
print cont.name
cont.dumm = 0
print cont.dumm
Meine Frage(n): Ist da ein Fehler drin oder geht das irgendwie "eleganter" und/oder kürzer?
MfG,
Uwe