Frage zur Namensgebung (Variable im Namen)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
m.k.
User
Beiträge: 2
Registriert: Montag 24. September 2007, 18:00

Guten Tag, ich habe eine Frage wie es in der Überschrift steht und zwar würde ich mir gerne diese Struktur:

Code: Alles auswählen

Haus1=Haus(1)
Haus2=Haus(2)
...
ersparen, indem ich folgende Schleife einsetze:

Code: Alles auswählen

for i in range(100):
     Haus(i+1)
Das Problem hierbei ist, dass die jeweilige Klasse Haus, die ich erstelle nun keiner variablen mehr zugeordnet werden kann, dazu müsste ich

Code: Alles auswählen

nr=str(i+1)
Haus+nr=Haus(i+1)
schreiben, doch das geht nicht :roll:
Gibt es da irgendeine Möglichkeit dieses Problem zu lösen?
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
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]
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

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!
:D 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.
m.k.
User
Beiträge: 2
Registriert: Montag 24. September 2007, 18:00

Danke BlackJack, das klappt wunderbar :)
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 ;)
Antworten