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