Verkettung von String und Instanz

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.
thyseus
User
Beiträge: 2
Registriert: Mittwoch 17. Mai 2006, 16:18
Kontaktdaten:

Verkettung von String und Instanz

Beitragvon thyseus » Mittwoch 17. Mai 2006, 16:23

Hallo zusammen.

Ich habe eine Klasse:


Code: Alles auswählen

 
class a:
  def __init__(self, bezeichnung):
    self.bezeichnung = bezeichnung

  def __str__(self):
    return self.bezeichnung


führe ich nun folgendes aus:

Code: Alles auswählen

instanz = a("hello")
print instanz


so funktioniert alles wie geplant. Folgendes funktioniert aber nicht:

Code: Alles auswählen

instanz = a("hallo")
print "huhu" + instanz


Die Fehlermeldung lautet:

Code: Alles auswählen

TypeError: cannot concatenate 'str' and 'instance' objects


Gibt es eine Möglichkeit, strings mit dem Rückkgabewert des __str__ einer instanz zu verketten?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Mittwoch 17. Mai 2006, 16:31

Code: Alles auswählen

print "huhu" + str(instanz)


Und mache besser:

Code: Alles auswählen

def __str__(self):
    return str(self.bezeichnung)

damit str(...) auch wirklich immer einen String zurueck gibt.
thyseus
User
Beiträge: 2
Registriert: Mittwoch 17. Mai 2006, 16:18
Kontaktdaten:

Beitragvon thyseus » Mittwoch 17. Mai 2006, 16:34

Tatsächlich, mit dieser Lösung funktioniert es.

Danke für den Design-Tip :-)
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Mittwoch 17. Mai 2006, 19:11

Oder:

Code: Alles auswählen

class A(str):
 def __init__(self, b):
  self.b = b
 def __str__(self):
  return str(self.b)

a = A('World')
print 'Hello ' + a
TUFKAB – the user formerly known as blackbird

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], funkheld