Seite 1 von 1
Frage zur Namensgebung (Variable im Namen)
Verfasst: Montag 24. September 2007, 18:24
von m.k.
Guten Tag, ich habe eine Frage wie es in der Überschrift steht und zwar würde ich mir gerne diese Struktur:
ersparen, indem ich folgende Schleife einsetze:
Das Problem hierbei ist, dass die jeweilige Klasse Haus, die ich erstelle nun keiner variablen mehr zugeordnet werden kann, dazu müsste ich
schreiben, doch das geht nicht
Gibt es da irgendeine Möglichkeit dieses Problem zu lösen?
Verfasst: Montag 24. September 2007, 18:32
von poker
Hi,
Code: Alles auswählen
from pprint import pprint as pp
class Haus(object):
def __init__(self, id_):
self.id_ = id_
def __repr__(self):
return "<%s.%s with id %d>" %(
self.__class__.__module__,
self.__class__.__name__, self.id_)
ns = locals()
for idx in xrange(5):
ns["haus_%d" % idx] = Haus(idx)
pp(ns)
print haus_0
Das ist aber **sehr** schlechter Stil und sollte nicht verwendet werden! Mach dir mal Gedanken über eine richtige Datenstruktur.
EDIT: typos
Verfasst: Montag 24. September 2007, 18:43
von mitsuhiko
ARGH. Für das Schnippsel gehörst du geschlagen Poker!
@Topic: Für sowas gibts Listen und Dictionaries. Schau dir mal ein Python Tutorial an.
Verfasst: Montag 24. September 2007, 18:44
von BlackJack
Vielleicht sollte man das besser nicht verraten weil's so schlechter Stil ist und statt dessen lieber den besseren Stil zeigen.
Code: Alles auswählen
haeuser = [Haus(i) for i in xrange(100)]
# Zugriff mit:
haus = haeuser[0]
Verfasst: Montag 24. September 2007, 18:46
von poker
So hier mal etwas schnel zusammengeackt und viel besser
BTW Ungetestet!
Code: Alles auswählen
from pprint import pprint as pp
class Haus(object):
def __init__(self, id_):
self.id_ = id_
def __repr__(self):
return "<%s.%s with id %d>" %(
self.__class__.__module__,
self.__class__.__name__, self.id_)
class Stadt(object):
def __init__(self):
self._haeuser = []
def create(self, id_):
self._haeuser.append(Haus(id_))
def get(self, id_):
self._haeuser[id_]
def __iter__(self):
return iter(self._haeuser)
s = Stadt()
for idx in xrange(5):
s.create(idx)
pp(tuple(iter(s)))
In ``Stadt`` kann auch __getitem__, etc überladen werden und dann kannst wie mit einer Liste drauf zugreifen
blackbird hat geschrieben:ARGH. Für das Schnippsel gehörst du geschlagen Poker!
Ich weiß
Hab ja extra auch geschrieben das man das nicht verwenden soll. Aber hey, in Ruby mache ich sowas ähnliches den ganzen Tag *duck* -- Joke.
Verfasst: Montag 24. September 2007, 18:49
von m.k.
Danke BlackJack, das klappt wunderbar
Verfasst: Montag 24. September 2007, 21:07
von lunar
BlackJack hat geschrieben:Vielleicht sollte man das besser nicht verraten weil's so schlechter Stil ist und statt dessen lieber den besseren Stil zeigen.
Naja, immer zeigt dieses Beispiel auch ganz nett, was mit Python so alles möglich ist und in anderen Sprache so nicht gehen würde