steh auf dem "self" Schlauch

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
vegan
User
Beiträge: 12
Registriert: Freitag 13. Dezember 2013, 15:30

Ich muss mich mal wieder peinlich machen weil ich etwas wissen will, was wahrscheinlich erbärmlich simpel ist.

Ich spiel hier so rum und hatte versucht in einer Klasse self aufzurufen, also die Instanz. Ich versuche Infos im Internet zu finden weiß aber auch nich genau wonach ich suchen soll.

Beispiel:

Code: Alles auswählen

class Mensch:

    def namenSagen(self):
        print("Mein Name ist " + self)

misterX = Mensch()

misterX.namenSagen()

>>> Mein Name ist misterX
Diese Prinzip funktioniert nicht bei mir, also meine Frage:
Hab ich einen Flüchtigkeisfehler drin oder ist das Prinzip gänzlich falsch?
Wie würde es richtig funktionieren?

Sorry, wenn die Frage zu blöd ist und vorab schonmal danke fürs partizipieren.
BlackJack

@vegan: Arbeite ein Tutorial durch. Sprachkonstrukte raten ist keine sinnvolle Art zu lernen. In der Python-Dokumentation ist ein Tutorial. Und für absolute Programmieranfänger wird oft Learn Python The Hard Way empfohlen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Zusaetzlich zu BlackJack: Du bist total auf dem Holzweg.

Code: Alles auswählen

ladyBlack = misterX
ladyBlack.namenSagen()
Was wuerdest du hier erwarten?

Oder bei:

Code: Alles auswählen

population = [Mensch(), Mensch(), Mensch()]
for human in population:
    human.namenSagen()
`self` ist das Exemplar selbst, aber eben nicht der Name an den es gebunden ist (wenn es denn ueberhaupt an einen Namen gebunden ist!). Wenn deine Menschen einen Namen haben sollen, musst du ihnen einen solchen als Attribut zuweisen (z.b. in ``__init__``) und dann das Attribut in deiner Methode benutzen.
vegan
User
Beiträge: 12
Registriert: Freitag 13. Dezember 2013, 15:30

Ah, danke. Sowas hatte ich mir schon gedacht, brauchte aber professionelle Verifizierung.

Sorry nochmal für die noobige Frage. Python Tutorials arbeite ich ohnehin schon durch. Ich bleib am Ball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@vegan: Vielleicht hilft Dir dieser Thread auch weiter.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Bezeichnernamen sind Bezeichnernamen und nicht mehr. Wenn du dem Menschen direkt bei der Erstellung einen Namen geben willst ("Gib mir Tiernamen!" *räusper*), dann verwende einen passenden Konstruktor dem du den Namen mitgibst.

Code: Alles auswählen

class Mensch:
    def __init__(self, name):
        self.name = name

    def say_name(self):
        print('My name is {}'.format(self.name))

mister_x = Mensch('Mister X')
mister_x.say_name()

unknown_person = mister_x
unknown_person.say_name()
vegan
User
Beiträge: 12
Registriert: Freitag 13. Dezember 2013, 15:30

/me hat geschrieben:Bezeichnernamen sind Bezeichnernamen und nicht mehr. Wenn du dem Menschen direkt bei der Erstellung einen Namen geben willst ("Gib mir Tiernamen!" *räusper*), dann verwende einen passenden Konstruktor dem du den Namen mitgibst.
Hyperion hat geschrieben:@vegan: Vielleicht hilft Dir dieser Thread auch weiter.
Jo, danke auch an euch. Auch das hat mir noch ein Stück weitergeholfen.

Im Allgemeinen möchte ich TrayserCassa aus dem verlinkten Thread zitieren: Viel Dank an alle. Das war mehr wert als ein Tutorial
:D
Antworten