Pattern fuer Parameteraenderungen?

Martin von Loewis martin at mira.isdn.cs.tu-berlin.de
Mon Mar 9 21:48:26 EST 1998


Status: O

> Das ist nun ein simpler Fall, aber gibt es dafuer nichts besseres? Wie
> machen das so grosse Frameworks wie Tk oder Pmw? (Habe schon versucht
> da reinzuschauen, bin aber verlorengegangen)

Mit Python 1.5 kann man sich die Schleife vereinfachen:

>>> x1={'a':1}
>>> x2={'a':3,'b':4}
>>> x2.update(x1)
>>> x2
{'b': 4, 'a': 1}

Die genaue Semantik von update kann man in libtypes nachlesen.
Wenn Du jetzt noch einen Typtest bei Zuweisung willst, kannst Du
Dir leicht ein Dictionary selbst definieren:

from UserDict import UserDict
class TypeDict(UserDict):
    def __init__(self,**types):
	UserDict.__init__(self)
	self.types=types
    def __setitem__(self, key, val):
	if not self.types.has_key(key):
	    raise KeyError, key
	if type(val)!=self.types[key]:
	    raise ValueError,val
	UserDict.__setitem__(self,key,val)
    def update(self,other):
	for k, v in other.items():
	    self[k] = v

Damit passiert dann

>>> x=td.TypeDict(foo=type(1), bar=type(""), foobar=type(type(1)))
>>> x.update({'foo':5,'Hallo':56})
Traceback (innermost last):
  File "<stdin>", line 1, in ?
  File "td.py", line 15, in update
    self[k] = v
  File "td.py", line 9, in __setitem__
    raise KeyError, key
KeyError: Hallo

Ciao,
Martin

______________________________________________________________
   python-de          the German Python mailing list
send messages to:   <mailto:python-de at solar.skyport.net>
list manager: <mailto:owner-python-de at solar.skyport.net>
______________________________________________________________




More information about the Python-de mailing list