Diskussion zu New-Style Klassen

Zum Punkt Slots bzw. der Anmerkung am Ende:

Wieso ist das kein Vorteil, schließlich kann man damit sehr leicht Fehlern vorbeugen. Außerdem kann man damit so nette Sachen machen wie:

   1 class Foo(object):
   2     __slots__ = ("bing", "bang", "bong")
   3 
   4     def __init__(self, **kwargs):
   5         """Constructor of the Foo class. Any member defined by it's name in
   6            Foo.__slots__ is allowed as a keyword argument"""
   7         for slot in self.__slots__:
   8             setattr(self, slot, None)
   9         for key, value in kwargs.items():
  10             setattr(self, key, value)
  11 
  12 f = Foo() # geht
  13 print f.bing
  14 print f.bang
  15 print f.bong
  16 
  17 f2 = Foo(bing=1, bong=99) # geht auch
  18 
  19 print f2.bing
  20 print f2.bang
  21 print f2.bong
  22 
  23 f3 = Foo(bing=1, bang=5) # das auch
  24 
  25 print f3.bing
  26 print f3.bang
  27 print f3.bong
  28 
  29 f4 = Foo(bar=23) # geht nicht
  30 
  31 # etc. Damit hat man also eine sehr flexible Möglickeit Objekte mit nur einem Konstruktor,
  32 # auf viele Arten zu erzeugen, und hat gleichzeitig die Garantie,
  33 # dass keine unerlaubten Member genutzt werden + dass der Speicherbedarf geringer ist
  34 

   1 # Tja, und dann leite ich von Foo ab und meine Selbstbeschränkung
   2 # ist dahin:
   3 
   4 class FooEx(Foo):    pass
   5 f4 = FooEx(bang=5, bar=4)  # geht
   6 
   7 # Wäre __slots__ dafür gedacht, unerlaubte Members zu verhindern 
   8 # (was es definitiv nicht ist), wäre die Umsetzung schon ziemlich 
   9 # armselig. Zudem, die Nebenwirkungen und Einschränkungen von 
  10 # __slots__ (siehe Referenz) wären für normale Programmieraufgaben
  11 # kaum akzeptabel. Sinnvoll werden die wenigsten von uns __slots__ 
  12 # einsetzen können.
  13 # Zudem: für jemanden, der solche Restriktionen befürwortet, muß ja 
  14 # Python eine grausame Sprache sein ;-)
  15 
  16 # es mag nicht dafür gedacht sein, ist aber dennoch ziemlich praktisch,
  17 # auch wenn Du es nicht wahrhaben willst. Ich jedenfalls benutze das 
  18 # täglich bei meiner Arbeit... und nein, Python ist nicht schrecklich für mich, sondern das beste, 
  19 # was ich bisher an Sprachen gesehen habe. Außerdem bin ich Fan von __slots__, weil es extrem Speicher
  20 # sparen hiflt, wenn man viele Instanzen zu händeln hat, aber das hatten wir ja schon...
  21 

Diskussion/New-Style Klassen (last edited 2009-06-17 16:14:15 by localhost)