OOP

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.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

OOP

Beitragvon Imperator » Sonntag 14. Oktober 2007, 12:50

Erst der Code:

Code: Alles auswählen

import random
class Mensch:
    def __init__(self):
        Namen = ['Alexander', 'Markus', 'Bert', 'Katharina', 'Sabrina', 'Vera', 'Colin', 'Daniel', 'Benedikt', 'Christian', 'Christoph', 'Gregor', 'Martin', 'Nicole', 'Jasmin', 'Sandra', 'Anke', 'Jack', 'Julia']
        self.Name = random.choice(Namen)
        self.Alter = random.randint(1,90)
    def Identifikation(self):
        print (self.Name)
        print (self.Alter)

Element = 1
ABC = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
Zahl = random.randint(10,24)
for i in range(Zahl):
    print (ABC[Element])
    ABC[Element] = Mensch()
    Element = Element + 1

dann das Problem:
Normal kann man doch, wenn man ein Programm ausführt im Interpreter weiter darauf zugreifen. Also z.B. ein neues Objekt von einer Klasse aus dem Programm erstellen. Hier funktioniert das aber nicht. Woran kann das liegen?
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Sonntag 14. Oktober 2007, 13:12

Also bei mit gehts. (command-line)
Was machst du denn? Und was passiert bei dir? Fehlermeldung?
Zudem:

Code: Alles auswählen

#..
        Namen = ['Alexander', 'Markus', 'Bert', 'Katharina', 'Sabrina', 'Vera', 'Colin', 'Daniel', 'Benedikt', 'Christian', 'Christoph', 'Gregor', 'Martin', 'Nicole', 'Jasmin', 'Sandra', 'Anke', 'Jack', 'Julia']
#..
    def Identifikation(self):
#..

ABC = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
#...
for i in range(Zahl):
#..
    ABC[Element] = Mensch() #das sogar doppelt! ->?
    Element = Element + 1

Dadran hätt ich was auszusetzen, tw. ist's wohl sinnlos, tw. nur wesentlich einfacher machbar.
Kannst ja mal nen bissl suchen und überlegen, was ich da jew. meine :wink: , ansonsten stehts hier wahrscheinlich gleich etwas weiter unten...

lg
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Beitragvon Imperator » Sonntag 14. Oktober 2007, 13:20

b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r

Das war der Output. Wenn ich jetzt hinschreibe: r.Identifikation(), dan kommt:
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
r.Identifikation()
NameError: name 'r' is not defined
BlackJack

Beitragvon BlackJack » Sonntag 14. Oktober 2007, 13:23

Ich verstehe die Frage auch nicht. Und nicht so ganz was das Programm eigentlich tun soll.

Wenn etwas nicht so funktioniert wie Du möchtest, aber keine Ausnahme produziert, ist es immer hilfreich wenn Du uns verraten würdest was Du denn erwartest. Wir sind ja keine Hellseher.

Was so auffällt: Zeilen sollten möglichst nicht länger als 80 Zeichen sein. Die Namensgebung hält sich nicht an den Style Guide.

Was sollen denn die Klammern bei den ``print``-Anweisungen?

Indexe bei Listen fangen bei 0 an, d.h. das 0te Element bleibt immer 'a' und ich sehe auch nicht so ganz den Sinn einer Liste die Kleinbuchstaben und `Mensch`-Objekte vermischt enthält!?

Die Ausnahme sagt doch recht deutlich das es den Namen `r` nicht gibt. Wie kommst Du darauf das es ihn geben sollte!? In welcher Zeile wird der Name `r` an irgend etwas gebunden?
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Sonntag 14. Oktober 2007, 13:30

ich glaube es sollten dynamisch variablen erstellt werden.
wenn, dann geht das aber über nen dict:

Code: Alles auswählen

keys = [listofkeys]
d=dict()
for key in keys:
   d[key] = Mensch()
d["r"].identifizieren()
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Beitragvon Imperator » Sonntag 14. Oktober 2007, 13:54

Ja, es sollen Variablen dynamisch erstellt werden. Als Namen verwende ich halt die Buchstaben des ABC. Und ich würde erwarten, dass wenn ich r.Identifizieren() eingebe, ein Output stattfindet in dem dann zum Beispiel Christian 30 steht.
alan
User
Beiträge: 81
Registriert: Dienstag 10. April 2007, 11:30

Beitragvon alan » Sonntag 14. Oktober 2007, 14:00

Hat nicht wirklich was mit deiner Frage zu tun, aber diese ABC-Liste tut echt weh :)

Code: Alles auswählen

>>> from string import ascii_lowercase
>>> abc = ascii_lowercase
>>> abc
'abcdefghijklmnopqrstuvwxyz'
BlackJack

Beitragvon BlackJack » Sonntag 14. Oktober 2007, 14:18

@Imperator: Warum würdest Du das erwarten? Wenn Du dem Namen `r` nicht irgendwann einmal etwas zugewiesen hast, wie soll er dann plötzlich an ein Objekt gebunden sein?

Da gibt es übrigens auch keinen Unterschied zum interaktiven Interpreter wie Du im ersten Beitrag andeutest.

Namen im Modul werden im Grunde nur durch drei Mechanismen an ein Objekt gebunden: Entweder eine explizite Zuweisung der Form ``name = obj``, als Teil einer Klassen- oder Funktionsdefinition (``class``/``def``) oder indem man sie aus einem anderen Modul importiert. Alles andere ist "Magie" und eher ungewöhnlich.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

Beitragvon Imperator » Sonntag 14. Oktober 2007, 14:19

Habs so umgeändert

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot], Liffi